Указатель на двумерный массив - PullRequest
2 голосов
/ 10 февраля 2012

Объявление массива

char a[10][20] = {...}

Я не могу найти правильный способ создания указателя x, чтобы a[1][3], например, было x[1][3].

Я пытался:

// try 1
char * x; x = &a[0][0];
// try 2
char * x; x = a;
// try 3
char ** x; x = a;
// try 4
char ** x; x = &a[0][0];

Как мне это решить?

Ответы [ 3 ]

2 голосов
/ 10 февраля 2012

Вы можете сказать char (*p)[20] = a;, что превращает p в указатель на массив из 20 символов. Это означает, что ++p переходит к следующему срезу из 20, и у вас есть 10 из этих срезов (каждый обозначается выражением p[i], где 0 & le; i <10. </p>

0 голосов
/ 10 февраля 2012

Вы можете использовать обычный указатель на двумерный массив таким образом

int arr[10][20];
int* p = (int*) arr; or p = &arr[0][0];
//the mean to set or get value of the member [i][j]
*(p+20*i +j) = 777;
int a = *(p+20*i+j);
0 голосов
/ 10 февраля 2012

Значение a имеет тип char (*)[20], то есть указатель типа на массив 20 из char.

Вы можете объявить объект x этого типа следующим образом:

char a[10][20] = { ... };
char (*x)[20] = a;

x[3][14] = 42;  // you can then access x elements like with a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...