Dlaczego przy "char argv[]" musi być wieloznacznik (*)?

0

Witam! Ostatnio czytałem co zrobić, żeby program mógł przyjmować parametry. w int main() musiały być parametry int argc oraz tablica char argv[]. Tylko, że przy argv[] był wieloznacznik (gwiazdka). Co ona oznaczała? Po co była? Bez niej kod nie działał. Dodatkowo widziałem, że wszędzie gdzie są zmienne char trzeba dać gwiazdkę, o co z tym chodzi?

1

Ale aż tak trudno wpisać w google co oznaca argc oraz argv oraz jak się tego używa?:
argc - argument count
argv - argument vector.

Tak samo zapis *tab[] oznacza, że to tablica wskaźników.

Zatem przykładowo jak wywołamy program:
program.exe arg1 arg2 arg3
będziemy mieli:

argc -> 4
argv[0] -> program.exe
argv[1] -> arg1
argv[2] -> arg2
argv[3] -> arg3

Poza tym co to za nazwa wieloznacznik....

Po więcej odsyłam do jakiegokolwiek tutka na temat C/C++ bo pytasz o zupełne podstawy

0

Ja tam używam char **argv, jest bardziej czytelnie.

4
Zimny Orzeł napisał(a):

Ja tam używam char **argv, jest bardziej czytelnie.

Jest mniej czytelne, bo sugeruje że argv jest wskaźnikiem na wskaźnik, a tymczasem jest tablicą wskaźników.
Nawias [] wyraźnie wskazuje że elementów może być więcej niż jeden, a * sugeruje że jest tylko jeden.

Z punktu widzenia języka C nie ma znaczenia czy dasz **argv czy *argv[] albo nawet *alamakota[] bo nazwa jest dowolna, ale z założenia jest to int main(int argc, char *argv[]).

0

@PrezesiQ:
Załóżmy że masz 2 tablice znaków
F O O \0
B A R \0

Gdybyś chciał przekazać ją do funkcji to tak naprawdę przekazujesz jako wskaźnik to pierwszego elementu (char* arg)
F O O \0
^

Więc gdy chcesz przekazać kilka takich tablic, a więc kilka wskaźników robisz tablicę wskaźników (char* args[])

1 użytkowników online, w tym zalogowanych: 0, gości: 1