2015-08-26 3 views
-1

int val = 7;Указатель и массив назначение

int *ptr = &val; 

Допустимы переменная типа Int и PTR является указателем на тип INT поэтому выше назначение прав, и нет никакого предупреждения от компилятора.

int val[5] = {5, 3, 2, 33,557}; 
int (*ptr)[1]=&val; 

Допустимы массив целых чисел и PTR является указателем на массив INT при запуске компилятор дать мне предупреждение:

warning: initialization from incompatible pointer type [enabled by default] 

пожалуйста, кто-то объяснить мне, что это differece между их?

ответ

2

Предупреждение связано с тем, что тип указателя (указатель на длину 1 массив int) не соответствует типу массива, с массивом длины 5 от int. Вам нужно

int (*ptr)[5]=&val; 

Там нет никакого предупреждения в первом примере, так как тип указателя на LHS инициализации соответствует типу указателя на РИТ.

+0

Я думаю, что 'int (* ptr) [5] = &val;' неверно, так как он (почти) говорит объявить массив из 5 указателей на int, а затем установить (трудно сказать, какую запись в 'ptr []' array) устанавливается в адрес «val». Возможно, вы имели в виду: 'int * ptr [5]; ptr [0] = &val; ' – user3629249

+2

@ user3629249 Нет, я имел в виду то, что написал. 'int (* ptr) [5]' является указателем на массив из 5 целых чисел. – juanchopanza

+0

@ user3629249 Вот [связанный вопрос] (http://stackoverflow.com/questions/859634/c-pointer-to-array-array-of-pointers-disambiguation). – juanchopanza

Смежные вопросы