[英]multiple array assigning to pointer to pointer in C
我有两个 arrays
int x[]={1,2,3,4};
int y[]={5,6,7};
我喜欢创建二维数组。 分配 x 和 y。 我可以做这样的事情吗
int x[]={1,2,3,4};
int y[]={5,6,7};
int *k=x;
int *l=y;
int **m={k,l};
printf("%d\n",m[0][0]);
但是在printf
访问 1 时会抛出 segFault
我做错了什么
int **m={k,l};
是错的。 这是将k
( int*
) 的值分配给变量m
( int**
) 并使初始化程序中的多余元素l
未使用。
您可以使用数组
int *m[]={k,l};
或复合文字
int **m=(int*[]){k,l};
反而。
Arrays 不是指针。 指针不是 arrays。 因此,指向指针的指针也不是 arrays 的 arrays 。
Arrays 在某些情况下可能会“衰减”为指向其第一个元素的指针,但这并不能使它们成为指针。
在您的情况下正确的代码是:
int x[]={1,2,3,4};
int y[]={5,6,7};
int xy[4][3];
memcpy(xy, x, 4*sizeof x);
memcpy(xy, y, 3*sizeof y);
或者动态分配二维数组:
int (*xy)[3] = malloc( sizeof(int[4][3]) );
如果有意义,您可以使用指针创建基于指针的查找表:
int* table [2] = {x, y};
但这可能会比 2D 数组具有更慢的访问时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.