Двойной указатель в int main - PullRequest
1 голос
/ 22 октября 2011

Я все еще пытаюсь понять о двойных указателях.

Я знаю, как двойные указатели обычно используются в большинстве случаев, таких как

void foo(char **ptr)
{
 // blah
}

int main(void)
{
    char *ptr;
    foo(&ptr);
}

Однако я понятия не имею, что можно сделать иначедругой

int main(int argc, char **argv) //Double pointer

int main(int argc, char *argv[]) // Single

Ответы [ 2 ]

3 голосов
/ 22 октября 2011

При использовании в качестве параметра функции указатель массива [] точно такой же, как указатель.Два объявления, которые у вас есть для main, фактически идентичны.

Бывают случаи, когда два разных синтаксиса означают разные вещи, но это не один из них.это означает, что у вас есть массив указателей.Каждый указатель указывает на массив символов.argv[0] - указатель на первую char* строку, argv[1] - указатель на вторую char* строку и т. Д.

2 голосов
/ 22 октября 2011

Я чувствую твою боль! Мне потребовалось много времени, чтобы убедить себя, что я должен относиться к ним точно так же.

argv [1] указывает на первый параметр, argv [argc-1] указывает на последний параметр. Да, все снайперы, это правда, если argc> 0.

Это моя формула, и я придерживаюсь ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...