2 D массив ссылок - PullRequest
       12

2 D массив ссылок

2 голосов
/ 27 мая 2010

Пожалуйста, посмотрите на этот кусочек кода: -

#include<stdio.h>
int main()
{
int arr[2][2]={1,2,3,4};
printf("%d %u %u",**arr,*arr,arr);
return 0;
}

Когда я скомпилировал и выполнил эту программу, я получил одно и то же значение для arr и * arr, которое является начальным адресом массива 2 d. Например: - 1 3214506 3214506

Мой вопрос: почему разыменование arr (* arr) не печатает значение, хранящееся по адресу, указанному в arr?

Ответы [ 2 ]

5 голосов
/ 27 мая 2010

* arr - это целочисленный массив типа длины 2, поэтому он имеет тот же адрес, что и arr. Они оба указывают на начало своих массивов, которое находится в одном и том же месте.

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

в C, 2d массив не представлен в памяти как массив массивов; скорее это обычный 1d массив, в котором первое заданное измерение необходимо для вычисления правильного смещения в массиве во время выполнения. Вот почему в многомерном массиве всегда нужно указывать все размеры, кроме последнего (что не обязательно); например, если вы объявляете массив как

int a[2][3][4];

массив будет представлен в памяти как один массив из 2 * 3 * 4 элементов в общей сложности. Попытка получить доступ к элементу в позиции (i, j, k) фактически приведет к получению доступа к элементу 3 * i + 4 * j + k в обычном массиве. В некотором смысле, начальные размеры необходимы, чтобы знать, куда поместить «разрывы строк» ​​в массиве 1d.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...