2014-12-09 3 views
0

Есть ли существенная разница между ними? Для меня это выглядит так же ... и по некоторым данным, кажется, прибегая к помощи такой же, как well..Just Wanna подтвердить это здесь ..В чем разница с указателем и массивом в качестве параметров?

void getAnything(int arr []) 
{ 
    arr[0] = 2; 
} 

против

void getAnything(int *arr) 
{ 
    arr[0] = 2; 
} 

главный

int main() 
{ 
    int arr [1]; 
    getAnything(arr); 
} 
+2

Это, вероятно, дубликат. В качестве объявления параметра (и * only * в качестве объявления параметра) 'int arr []' действительно означает 'int * arr'. Нет параметров типа массива. Выражение типа массива в большинстве контекстов неявно преобразуется в указатель на его первый элемент. Вот почему 'sizeof arr' внутри функции дает вам размер указателя, а не размер массива; вы должны сами это отслеживать. Прочтите раздел 6 [comp.lang.c FAQ] (http://www.c-faq.com/); это относится к C++, а также к C. –

+0

Связано: http://stackoverflow.com/questions/12127625/array-syntax-vs-pointer-syntax-in-c-function-parameters –

+0

Вы могли бы просто скомпилировать код и компилятор заявил бы, что функции одинаковы, поэтому была бы испущена ошибка. http://ideone.com/xrtFYW – PaulMcKenzie

ответ

1

То же самое. На самом деле, у вас было бы что-то вроде

void getAnything(int arr [10]) 
{ 
    arr[0] = 2; 
} 

также было бы таким же.

0

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

[C++11: 8.3.5/5]:[..] После определения типа каждого параметра, любой параметр типа «массив T» или «функция, возвращающая T» доводят до be "указатель на T" или "указатель на функцию, возвращающую T", соответственно. [..]

Это довольно запутанное, потому что это означает, что ваш аргумент не нужно на самом деле имеет ничего общего с массивами бы то ни было, но там вы идете; спасибо, C! Это также помогает поощрять миф о том, что «массивы являются указателями», к сожалению.

Все следующее:

void foo(int[] x); 
void foo(int[5] x); 
void foo(int[42] x); 

на самом деле означает это:

void foo(int* x); 
Смежные вопросы