簡體   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