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