簡體   English   中英

代碼結果說明

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM