為什么這個輸出1?如果 p[i][j] = i j; 當 i==0 和 j ==0 時,它不應該輸出 0 那么 p[0][0j] 也應該是 0。當我運行此代碼時,它輸出 1。
int main(void){
int i, j;
int **p = (int **) malloc(2 * sizeof(int*));
p[0] = (int*)malloc(2*sizeof(int));
p[1] = p[0];
for(i = 0; i < 2; i )
for(j=0; j < 2; j )
p[i][j]=i j;
printf("%d\n", p[0][0]);
return 0;
}
uj5u.com熱心網友回復:
繪制您最終在此處獲得的記憶體布局圖可能會有所幫助:
---
p: | * |
-|-
|
V
--- --- ---
| *-------> | 1 | 2 |
--- ,-> --- ---
| *----'
---
由于p[0]和p[1]指向同一個地方,您實際上并沒有得到其余代碼似乎建議的 2x2 陣列。
如果你像這樣重寫分配代碼:
int **p = (int **) malloc(2 * sizeof(int*));
for(i = 0; i < 2; i )
p[i] = (int*)malloc(2*sizeof(int));
那么你最終會得到這樣的記憶:
---
p: | * |
-|-
|
V
--- --- ---
| *-------> | 0 | 1 |
--- --- ---
| *---. --- ---
--- `--> | 1 | 2 |
--- ---
現在你會發現那p[0][0]將是 0。
uj5u.com熱心網友回復:
因為p[1]和p[0]是同一個指標,因此與p[1][0]是同一個物件p[0][0]。因此,當您擁有i==1and 時j==0,您將 1 存盤到該物件,這會覆寫您在i==0and時放置在那里的 0 j==0。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/342867.html
