В чем разница между "* variable" и "* variable []" в C? - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть две разные версии кодов, использующих массив символов на языке программирования C.

Первая версия:

int main(int argc, char *argv[]) {
    return 0;
}

Вторая версия:

int main(int argc, char *argv) {
    return 0;
}

Все кодыкомпилируется без предупреждений или ошибок, так что есть какая-то разница между этими кодами?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Для функции main второй параметр argv лучше определить как *argv[] или **argv.

Этот параметр не будет использоваться, если ваша программа не обрабатывает команду "Параметры линии ".Но если вам это нужно (например, строка -lR в ls -lR), вы можете заметить, что параметр s станет двумерным массивом символов, или мы скажем массив (параметр) строка с .Поскольку "строка" в C может быть char* или char[] в разных ситуациях, мы можем представить двумерный массив символов как char *argv[] или char **argv.

Кроме того, если вы используетеgcc -Wall, вторая программа выдаст предупреждение о том, что тип второго параметра main должен быть char**.

0 голосов
/ 08 декабря 2018

Из стандарта C # 5.1.2.2.1p1

1 Функция, вызываемая при запуске программы, называется главной.Реализация не объявляет прототип для этой функции.Он должен быть определен с типом возврата int и без параметров:

    int main(void) { /* ... */ }

или с двумя параметрами (именуемыми здесь как argc и argv, хотя могут использоваться любые имена, так как они являются локальными дляфункция, в которой они объявлены):

    int main(int argc, char *argv[]) { /* ... */ }

или эквивалентная; 10) или каким-либо другим способом, определяемым реализацией.

Согласно стандартам, ваша вторая версия неверна:

int main(int argc, char *argv) {
    return 0;
}

При компиляции с помощью компилятора gcc появляется следующее сообщение об ошибке:

prg.c:1:5: error: second parameter of 'main' (argument array) must be of type 'char **'

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