繁体   English   中英

多个数组分配给指向 C 中的指针的指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM