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

C中指向数组的指针:地址算法和数组赋值,c,pointers,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-like数组中。这是否可能。。。?如何 int (*p)[3]; int a[3] = { 1,2,3 } ; int b[3] = { 11,22,33 } ;

我有以下指向数组变量的指针

 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-like数组中。这是否可能。。。?如何

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

 int (*p)[3];
 int a[3]  = { 1,2,3 } ;  
 int b[3]  = { 11,22,33 } ;  
 int c[3]  = {111,222,333} ;
p=(int(*)[])malloc(3)<现在这个p可以指向三个 大小为3的整数数组。我如何分配这些a,b,c给这个 p

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

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

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

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

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

 int (*p)[3];
 int a[3]  = { 1,2,3 } ;  
 int b[3]  = { 11,22,33 } ;  
 int c[3]  = {111,222,333} ;
以及指向int数组的指针数组:

 int (*p)[3];
 int a[3]  = { 1,2,3 } ;  
 int b[3]  = { 11,22,33 } ;  
 int c[3]  = {111,222,333} ;
int** p[3];
int a[3] = { 1,2,3 } ;
//...
p[0] = &a;
//...
就这样

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

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

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

 int (*p)[3];
 int a[3]  = { 1,2,3 } ;  
 int b[3]  = { 11,22,33 } ;  
 int c[3]  = {111,222,333} ;
以及指向int数组的指针数组:

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

您不需要分配内存,它是在声明指针数组时分配的。每个指针都应该指向已经分配的内存,但是
a
b
c
是自动/静态分配的,所以您不必担心这一点。只需将它们分配给数组的成员
p
,就完成了

 int (*p)[3];
 int a[3]  = { 1,2,3 } ;  
 int b[3]  = { 11,22,33 } ;  
 int c[3]  = {111,222,333} ;
如果
p
是指向数组的指针,则代码应为:

 int (*p)[3];
 int a[3]  = { 1,2,3 } ;  
 int b[3]  = { 11,22,33 } ;  
 int c[3]  = {111,222,333} ;
int **p = malloc(sizeof(int*)*3);
...
p[0] = a; p[1] = b; p[2] = c;
...
free(p); /* when done*/
声明
int*p[3]
将创建指针数组,而不是指向数组的指针

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

 int (*p)[3];
 int a[3]  = { 1,2,3 } ;  
 int b[3]  = { 11,22,33 } ;  
 int c[3]  = {111,222,333} ;
如果需要指向数组的指针,则可以执行以下操作:

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

别忘了,你可以用
一个
作为指向它所代表的数组的指针,在需要的地方,你不需要一个单独的变量。

你不需要分配内存,它是在你声明指针数组时分配的。每个指针都应该指向已经分配的内存,但是
a
b
c
是自动/静态分配的,所以您不必担心这一点。只需将它们分配给数组的成员
p
,就完成了

 int (*p)[3];
 int a[3]  = { 1,2,3 } ;  
 int b[3]  = { 11,22,33 } ;  
 int c[3]  = {111,222,333} ;
如果
p
是指向数组的指针,则代码应为:

 int (*p)[3];
 int a[3]  = { 1,2,3 } ;  
 int b[3]  = { 11,22,33 } ;  
 int c[3]  = {111,222,333} ;
int **p = malloc(sizeof(int*)*3);
...
p[0] = a; p[1] = b; p[2] = c;
...
free(p); /* when done*/
声明
int*p[3]
将创建指针数组,而不是指向数组的指针

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

 int (*p)[3];
 int a[3]  = { 1,2,3 } ;  
 int b[3]  = { 11,22,33 } ;  
 int c[3]  = {111,222,333} ;
如果需要指向数组的指针,则可以执行以下操作:

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

别忘了-您可以使用
a
本身作为指向它所表示的数组的指针,如果需要,您不需要单独的变量。

请看,我已经创建了指向数组的指针。。。不是一个指针数组,你把我弄糊涂了。指向您在那里创建的内容的指针?到
int[3]
?我的答案仍然成立,这对malloc并不重要,所有指针的大小都是一样的。没错。但我想把指针赋值给数组变量。不是指针数组或指向指针的指针。请看,我已经创建了指向数组的指针。。。不是一个指针数组,你把我弄糊涂了。指向您在那里创建的内容的指针?到
int[3]
?我的答案仍然成立,这对malloc并不重要,所有指针的大小都是一样的。没错。但我想把指针赋值给数组变量。不是指针数组或指向指针的指针。这是您要求的吗?如果没有,你能准确地回答或重新措辞你的问题吗?请注意,数组是指向数组第一个值的指针,因此可能会让您感到困惑。如果你描述一下你想用它做什么,我会更新我的答案。@littleadv:我在第一次编辑之前谈论过代码。@Aditaya我从来没有放过
int(*p)[3],它总是一个
int*p[3](如果我没有弄错的话)。你粘贴的代码是问题代码和我的代码的混合体。(顺便说一句,谢谢你链接到codepad,以前从未听说过)这就是你想要的吗?如果没有,你能准确地回答或重新措辞你的问题吗?请注意,数组是指向数组第一个值的指针,因此可能会让您感到困惑。如果你描述一下你想用它做什么,我会更新我的答案。@littleadv:我在第一次编辑之前谈论过代码。@Aditaya我从来没有放过
int(*p)[3],它总是一个
int*p[3](如果我没有弄错的话)。你粘贴的代码是问题代码和我的代码的混合体。(顺便说一句,谢谢你链接到codepad,以前从未听说过)恐怕我不明白这个问题。你能准确地说出完整的型号吗?例如:指向int的指针数组,或指向int数组的指针数组?代码中的malloc分配3个字节,它不能像您预期的那样指向3个整数数组,因为在任何现代计算机上指针的大小至少为4个字节。更正:您的意思是
p=(int(*)[])malloc(3*sizeof(int*)p=(int(*)[])malloc(3*sizeof(int*)
 int (*p)[3];
 int a[3]  = { 1,2,3 } ;  
 int b[3]  = { 11,22,33 } ;  
 int c[3]  = {111,222,333} ;