const array const {} - PullRequest
       26

const array const {}

7 голосов
/ 31 августа 2011

Так что вы можете сделать это:

void foo(const int * const pIntArray, const unsigned int size);

Что говорит о том, что указатель доступен только для чтения, а целое число, на которое он указывает, только для чтения.

Вы можете получить доступ к этому внутри функции следующим образом:

blah = pIntArray[0]

Вы также можете сделать следующее объявление:

void foo(const int intArray[], const unsigned int size);

Это почти то же самое, но вы могли бы сделать это:

intArray = &intArray[1];

Могу ли я написать:

void foo(const int const intArray[], const unsigned int size);

Это правильно?

Ответы [ 3 ]

15 голосов
/ 31 августа 2011

Нет, ваш последний вариант неверен. То, что вы пытаетесь сделать, достигается в C99 с помощью следующего нового синтаксиса

void foo(const int intArray[const], const unsigned int size);

, что эквивалентно

void foo(const int *const intArray, const unsigned int size);

Этот синтаксис [const] специфичен для C99. Недействительно в C89 / 90.

Имейте в виду, что некоторые люди считают cv-квалификаторы верхнего уровня для параметров функции "бесполезными", поскольку они квалифицируют копию фактического аргумента. Я вовсе не считаю их бесполезными, но лично я не вижу особых причин использовать их в реальной жизни.

1 голос
/ 31 августа 2011

Используйте cdecl . Выдает ошибку на второй записи. Первый только ясно указывает на то, что второй const относится к *.

0 голосов
/ 31 августа 2011

В C / C ++ нельзя передать весь массив в качестве аргумента функции. Вы можете, однако передайте в функцию указатель на массив, указав имя массива без индекса.

(например) Этот фрагмент программы передает адрес i в func1 ():

int main(void)
{
int i[10];
func1(i);
.
.
.
}

Чтобы получить i, функцию func1 () можно определить как

void func1(int x[]) /* unsized array */
{
.
.
}

или

void func1(int *x) /* pointer */
{
.
.
}

или

void func1(int x[10]) /* sized array */
{
.
.
}

источник: ПОЛНАЯ ССЫЛКА - ГЕРБЕРТ.

...