указатель на массив, разница в 2D-массиве и 1d-массиве

Я двухмерный массив говорю 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