указател към масив, разлика в 2D масив и 1d масив

Аз 2D масив казвам int a[2][3]

когато извикаме функцията, кажете add(a);

получаваме го с помощта на указател към масив void add(int(*p)[3])

НО

В 1D масив кажете int b[5]

съхраняваме адреса на масива в прост указател към цяло число int *p; p=b;

моят въпрос е, че защо не съхраним b в указател към масив ex int(*p)[5]=b;


person Ravi Bisla    schedule 29.06.2013    source източник


Отговори (1)


Името на масив, когато се използва като стойност, ще се разпадне до стойност, равна на указателя към първия му елемент, с този тип. Това означава за:

int a[2][3];

Името a ще се разпадне до &a[0], което има тип int (*)[3]. Но за:

int b[5];

Името b ще се разпадне до &b[0], което има тип int *.

Въпреки това &b е указател към b, което означава, че има тип int (*)[5]. Случва се така, че за тип масив неговият адрес ще бъде сравнен с адреса на първия му елемент. Но &b има различен тип от &b[0].

person jxh    schedule 29.06.2013