[英]Explanation of code result
您能否向我解釋為什么二維數組中的第一個元素在此代碼中為1?
#include <stdio.h>
#include <stdlib.h>
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++){
printf("i=%d & j=%d\t",i,j);
p[i][j] = i + j;
printf("p[%d][%d]=%d\n",i,j,p[i][j]);
printf("this is the result of the first element %d\n",p[0][0]);
}
printf("this is the result %d\n",p[0][0]);
return 0;
}
結果是:
i = 0&j = 0 p [0] [0] = 0
這是第一個元素0的結果
i = 0&j = 1 p [0] [1] = 1
這是第一個元素0的結果
i = 1&j = 0 p [1] [0] = 1
這是第一個元素1的結果
i = 1&j = 1 p [1] [1] = 2
這是第一個元素1的結果
這是結果1
按下以關閉此窗口...
因為兩行p[0]
和p[1]
確實是相同的。
p
是兩個指針的數組:
int **p = (int **)malloc(2 * sizeof(int *));
第一個指向大小為2的數組:
p[0] = (int *)malloc(2 * sizeof(int));
第二個指向相同的數組:
p[1] = p[0];
因此, p[1][0]
任何修改都將反映在p[0][0]
,因為兩者均指向內存中的同一位置。 如您所驗證的,您為p[1][0]
分配了1
,因此p[0][0]
變為1
。
我試圖在圖中進行解釋(對此感到抱歉,但是更容易)。
因此,要糾正您的錯誤並聲明一個適當的二維矩陣,請代替malloc for p [0]編寫for(int i=0; i < 2;i++)p[i] = (int *)malloc(2*sizeof(int));
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.