• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak to tu wklepać?

Object Storage Arubacloud
0 głosów
222 wizyt
pytanie zadane 27 sierpnia 2015 w C i C++ przez Avernis Nałogowiec (27,400 p.)

Czy da się wstawić jakoś tablicę w tym: 

void Ships(const char *way[2], int eko[2])

 

2 odpowiedzi

+1 głos
odpowiedź 27 sierpnia 2015 przez Sebastian Fojcik Nałogowiec (43,020 p.)
edycja 27 sierpnia 2015 przez Sebastian Fojcik

A tak w ogóle to co oznaczają te dwójki w kwadratowych nawiasach przy deklaracji funkcji? Przecież to nie ma żadnego wpływu na przekazywanie argumentu. (pobawiłem się 5 minut przy tej funkcji i nie udało mi się jej wywołać XDD)

NIE można mieć kontroli nad tym, jak dużą tablicę przekazujesz. Myślisz, że przy deklaracji takiej funkcji:

void funkcja( int tablica[ 2 ] );

Myślisz, że nie dam rady posłać tam tablicy 100-elementowej? Bez problemu :-)
Poza tym, co znaczy: const char* way[ 2 ] ?

Jeśli chcesz przekazać tablicę jako argument to masz 2 sposoby:

const char * tablica
const char tablica[]

Połączenia ich jeszcze nigdy nie widziałem. Pokażcie mi jak wywołać funkcję z takim parametrem: (mi się nie udało, może wam XD)

const char * tablica[]

Jak wspomniałem, dwójki z nawiasów wyrzuciłem, bo nic nie znaczą. Kompilator je olewa.
Napisałem funkcję podobną do Twojej. Ma takie same parametry

​void funkcja( const char c[], int tab[] )
{
	cout << c[ 0 ];
	cout << tab[ 0 ];
}

Wywołujemy ją z takimi argumentami: (przykładowo)

int tab[] = { 0, 1, 2 }; // tablica int
char tab2[] = { 'a', 'b', 'c' }; // tablica char

funkcja( tab2, tab );

Powyższa definicja funkcji może również wyglądać tak:

​void funkcja( const char * c, int * tab )
{
	cout << c[ 0 ];
	cout << tab[ 0 ];
}

Nie wpłynie to w żaden sposób na wywoływanie funkcji. Tablica to przecież wskaźnik z własnym obszarem. Masz w tym przypadku dowolność.

komentarz 27 sierpnia 2015 przez niezalogowany
Dokładnie to samo od razu zauważyłem, po co tam jest 2, WTF? O_o No, ale nie muszę tego powtarzać, bo super wszystko opisałeś ;)
komentarz 28 sierpnia 2015 przez Buby Pasjonat (19,590 p.)
edycja 29 sierpnia 2015 przez Buby

const char * tablica[]  <--- Masz przekazać tablicę łańcuchów typu char. Taki parametr można mieć w funkcji main, aby wydobyć argumenty przekazane przez wiersz poleceń. Wywołanie tego może wyglądać tak np. tak:

#include<cstdio>
void show(char * tablica[])
{
     int i = 0;
    while(*(tablica + i))
    {
        printf("%s\n", *(tablica+ i));
        i++;
    }
}

int main(int argc, char** argv, char* envp[])
{
   printf("Sciezka wywolania oraz ewentualne argumenty:");
   show(argv);
   printf("\n\nZmienne srodowiskowe systemu:");
   show(envp);
   return 0;
}

Ten kod działa tylko pod windowsem. :)

komentarz 28 sierpnia 2015 przez Sebastian Fojcik Nałogowiec (43,020 p.)

Dzięki za dawkę nowej wiedzy! Mozna powiedzieć, że:

char tablica [] = char * tablica
char * tablica []  = char ** tablica

Taka prosta zależność, a nie wpadłem na to XD To chyba przez to, że jak wspominałem, widzę takie kombo pierwszy raz :-)

0 głosów
odpowiedź 27 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)
Może jaśniej? Chcesz stworzyć nowy argument, czy co?
komentarz 27 sierpnia 2015 przez Avernis Nałogowiec (27,400 p.)

czy da się zrobić tak aby nie trzeba było pisać np tak: 

void Ships(const char *way,  const char *waya, int eko, int ekoa)

 

komentarz 27 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)
Oczywiście, że się da, ale nadal nie wiem, w czym problem.
komentarz 27 sierpnia 2015 przez Avernis Nałogowiec (27,400 p.)
bo wywala mi błąd: convert 'const char*' to 'int*' for argument '2' to 'void Ships(const char*, int*)'
komentarz 27 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)
A pokaż całę funkcję.
komentarz 27 sierpnia 2015 przez Avernis Nałogowiec (27,400 p.)
#include<iostream>
#include<fstream>

using namespace std;

ifstream inted;
ofstream outed;
int items[2];

void Ships(const char *way[2], int eko[2])
{
    inted.open(way[1]);
    inted >> items[2];
    inted.close();

    items[2] = items[2] + eko[1];

    inted.open(way[2]);
    inted >> items[1];
    inted.close();

	items[1] = items[1] + 1;

    outed.open(way[2]);
    outed << items[1];
    outed.close();

}

 

komentarz 27 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)

A dlaczego w logu nie ma void Ships(const char**, int*)?

komentarz 27 sierpnia 2015 przez Avernis Nałogowiec (27,400 p.)
Teraz wyskakuje to: cannot convert 'const char*' to 'const char***' for argument '1' to 'void Ships(const char***, int*)'|
komentarz 27 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)

Lepiej pokaż także wywołanie tej funkcji. Sama funkcja Ships wygląda poprawnie.

Podobne pytania

0 głosów
0 odpowiedzi 130 wizyt
0 głosów
1 odpowiedź 126 wizyt
0 głosów
2 odpowiedzi 394 wizyt
pytanie zadane 27 sierpnia 2015 w C i C++ przez Avernis Nałogowiec (27,400 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...