Адреса в 2D Матрице - PullRequest
       13

Адреса в 2D Матрице

3 голосов
/ 24 декабря 2011

Я хочу знать, в чем разница между matrix, &matrix, matrix[0] и &matrix[0]+1? и его представление в памяти.

 int main(){
       int matrix[4][3];
       printf("%u\n",&matrix);
       printf("%u\n",&matrix+1);
       printf(" %u\n",matrix);
       printf("%u\n",matrix[0]+1);    
       printf(" %u\n",&matrix[0]);
       printf(" %u\n",&matrix[0]+1);
}

ПЛАТФОРМА ---- GCC Ubuntu 10.04

1 Ответ

3 голосов
/ 24 декабря 2011

В C многомерный массив - это просто непрерывный блок памяти.В вашем случае массив 4 × 3 - это непрерывный блок из 12 элементов, а «матрица» - это указатель на начальный адрес блока памяти.Здесь матрица, матрица [0], матрица [0] [0] относятся к начальному адресу блока памяти

Компилятор преобразует ваши операторы в

&matrix = get the starting address of the memory block
&matrix+1 = add '1' to matrix datatype, i.e. add 12 (total elements in matrix) * size of int (4 bytes) = 48 bytes.

matrix[0]+1 = address of first row, second element, i.e. &matrix[0][1]
&matrix[0] = address of first row, first element which is nothing but starting address of matrix
&matrix[0]+1 = add one row to starting address of matrix, i.e. 3 elements in a column * size of int(4 byte) = 12 bytes. Note that this is equivalent to (&matrix[0])+1 and not &(matrix[0]+1)
...