указатель на массив в C: адресная арифметика и присвоение массива - PullRequest
1 голос
/ 02 августа 2011

У меня есть следующий указатель на переменную массива.

 int (*p)[3];
 int a[3]  = { 1,2,3 } ;  
 int b[3]  = { 11,22,33 } ;  
 int c[3]  = {111,222,333} ;

Я хочу сохранить эти 3 массива в переменной p. Как я должен выделить память для р и Как я должен хранить эти 3 массива в p как массив указателей . Возможно ли это ...? и как ..?

Примечание:

p = (int (*) []) malloc (3);
Теперь этот p способен указывать три целочисленный массив, размер которого 3. Как я должен назначить эти a, b, c этому п ?

.

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Вам не нужно выделять память, она выделяется при объявлении массива указателей. Каждый указатель должен указывать на уже выделенную память, но a, b, c выделяются автоматически / статически, поэтому вам не нужно об этом беспокоиться. Просто назначьте их членам массива p и все готово.

Если p - указатель на массив, тогда код должен быть:

int **p = malloc(sizeof(int*)*3);
...
p[0] = a; p[1] = b; p[2] = c;
...
free(p); /* when done*/

Объявление int *p[3] создает массив указателей, а не указатель на массив.

редактировать

Если вам нужен указатель на массив, вы можете сделать это:

int a[3];
int *p = a;

И не забывайте - вы можете использовать a в качестве указателя на массив, который он представляет, где это необходимо, вам не нужна отдельная переменная.

0 голосов
/ 02 августа 2011
int* p[3];
int a[3] = { 1,2,3 } ;
int b[3] = { 11,22,33 } ;
int c[3] = { 111,222,333} ;

p[0] = a;
p[1] = b;
p[2] = c;

Вот и все.

Изменить 1

Указатель на массив?

int** p;
int a[3] = { 1,2,3 } ;
//...
p = &a;

Изменить 2

И массив указателей на массив int:

int** p[3];
int a[3] = { 1,2,3 } ;
//...
p[0] = &a;
//...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...