В чем разница между параметрами массива в C - PullRequest
1 голос
/ 03 мая 2010

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

bool getArray(int* array);
bool getArray(int* array[]);

Спасибо

С наилучшими пожеланиями, Sten

Ответы [ 4 ]

3 голосов
/ 03 мая 2010

Если это поможет вам подумать об этом, вы можете помнить, что int foo[] - это то же самое, что и int *foo на одном уровне. Так что в вашем примере первый передается указатель на int, а второй передается указатель на указатель на int.

1 голос
/ 03 мая 2010

Кстати, код, который вы разместили, - C ++. Нет такой вещи, как "C / C ++" ... Что делает ваши прототипы распознаваемыми как C ++ - совместимым является использование типа данных "bool" для типов возвращаемых функций. Булевы переменные не определены в C.

1 голос
/ 03 мая 2010

bool getArray(int *array); принимает указатель на int в качестве аргумента (фактически, массив целых чисел для заполнения). bool getArray(int *array[]); принимает массив указателей int. Первый - тот, который вам нужен, хотя вызывающей стороне необходимо выделить достаточно большой выходной массив, чтобы getArray() мог скопировать в него элементы массива.

Один из способов понять объявления указателя / массива C - это думать о них как о том, как получить доступ к базовому типу. int *array означает, что если вы скажете *array, вы получите int. int *array[] означает, что если вы скажете *array[x], вы получите int. char (*array)[5][2][3] означает, что если вы скажете (*array)[0 thru 4][0 thru 1][0 thru 2], вы получите чар.

0 голосов
/ 03 мая 2010

Для второго требуется указатель на массив. Так что если у вас массив int *getme;, то вы вызываете getArray(&getme);

...