下面是我的代碼片段C語言-2維數組
int arr[1][1];
arr[0][0]=55;
arr[0][1]=56;
arr[1][0]=57;
arr[1][1]=58;
printf("\n arr[0,0]=%d",arr[0,0]);
printf("\n arr[0,1]=%d",arr[0,1]);
printf("\n arr[0,2]=%d",arr[0,2]);
我得到的輸出 -12 -10 -8
有人可以讓我知道的ARR [0的意義, 0]
下面是我的代碼片段C語言-2維數組
int arr[1][1];
arr[0][0]=55;
arr[0][1]=56;
arr[1][0]=57;
arr[1][1]=58;
printf("\n arr[0,0]=%d",arr[0,0]);
printf("\n arr[0,1]=%d",arr[0,1]);
printf("\n arr[0,2]=%d",arr[0,2]);
我得到的輸出 -12 -10 -8
有人可以讓我知道的ARR [0的意義, 0]
Q有人可以讓我知道arr [0,0]的含義嗎?
Aarr[0,0]
相當於arr[0]
。
當您有一系列逗號分隔的表達式時,最後一個表達式的值就是整個表達式的值。作爲一個擴展的例子,
arr[10, 200, 50, 983, 52]
相當於arr[52]
程序需要返工打印一個整數,因爲你與你的格式說明使用%d
期待。
printf("\n arr[0][0]=%d",arr[0][0]);
如果你想打印arr[0][1]
和arr[0][2]
,你需要的arr
的定義修改爲
int arr[1][3];
看你的新代碼
變化
int arr[1][1];
到
int arr[2][2];
否則,以下行會顯示未定義的行爲:
arr[0][1]=56;
arr[1][0]=57;
arr[1][1]=58;
您正在使用逗號操作。它的計算結果爲第二個操作數,那麼你的代碼就相當於:
printf("\n arr[0,0]=%d",arr[0]);
printf("\n arr[0,1]=%d",arr[1]);
printf("\n arr[0,2]=%d",arr[2]);
這是三種不同的方式未定義行爲一次:
arr[0]
不是int(這是一個int數組) ,因此用%d
打印不對1
,所以arr[1]
和arr[2]
是超出邊界訪問。爲了解決這個問題,更改到類似:
int arr[2][2] = { {1, 2}, {3, 4} };
printf("arr[0][0]=%d\n",arr[0][0]);
printf("arr[1][0]=%d\n",arr[1][0]);
printf("arr[0][1]=%d\n",arr[0][1]);
printf("arr[1][1]=%d\n",arr[1][1]);
首先關於表達式的值(0,1):
int chk = (0,1);
printf("%d",chk);
這是你如何知道(0,1)的值。如果您想了解更多詳情,請參閱:this。
因此arr[0,1]
是相同arr[1]
而且,正因爲如此,他得到未定義的行爲,因爲他的陣列只有1元。 – Mauren