C中数组的指针:地址算术和数组赋值

时间:2011-08-02 08:53:35

标签: c pointers

我有指向数组变量的指针。

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

我想将这3个数组存储到变量p中。我如何为p分配内存 我应该如何将这3个数组存储到p 指针数组中。这是否可能......?以及如何......?

注意:

  

p =(int(*)[])malloc(3);
现在这个p能够指向三个   整数数组,大小为3。我如何分配这些a,b,c   p?

2 个答案:

答案 0 :(得分:1)

您不需要分配内存,在声明指针数组时会分配内存。每个指针都应指向已分配的内存,但abc会自动/静态分配,因此您无需担心。只需将它们分配给数组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作为指向它所代表的数组的指针,如果需要,您不需要单独的变量。

答案 1 :(得分:0)

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;
//...