Объявление параметров [] и * (массив) - PullRequest
2 голосов
/ 27 февраля 2011

Между формальными параметрами в определении функции, например:

void change (int *s)
{   
    s[0] = 42;
}

И другое определение:

void change (int s[])
{   
    s[0] = 42;
}

Они такие же, как я полагаю, поскольку *(a+0) совпадает сa[0].

Есть ли причина предпочитать одно другому?Обратите внимание, что предпочтение относится к стилю кодирования.

Ответы [ 3 ]

6 голосов
/ 27 февраля 2011

Да, они точно такие же. Все параметры функции, объявленные как массивы, настраиваются на соответствующий тип указателя.

Лично я предпочитаю первое, которое фактически делает его похожим на объявление указателя, как и в обоих случаях.

4 голосов
/ 27 февраля 2011

Я предпочитаю второй, потому что тогда ясно, что вы собираетесь использовать s в качестве массива. (хотя технически это указатель)

Я думаю, что это просто еще одна субъективная вещь.

3 голосов
/ 27 февраля 2011

Есть один случай, когда они могут отличаться в текущем языке Си.C99 допускает следующее:

void change (int s[static 2])
{   
    s[0] = 42;
}

, где [static 2] накладывает ограничение на интерфейс функции, которую переданный указатель должен быть таким, чтобы s[0] и s[1] имели доступдопустимые объекты типа int.В частности, интерфейс не допускает указателей NULL.

Обратите внимание, что [static 1] - это удобный способ просто указать, что указатель должен указывать на действительный объект.

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