2014-03-31 124 views
1

下面是我的代碼片段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]

回答

3

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; 
+1

而且,正因爲如此,他得到未定義的行爲,因爲他的陣列只有1元。 – Mauren

1

您正在使用逗號操作。它的計算結果爲第二個操作數,那麼你的代碼就相當於:

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

首先關於表達式的值(0,1):

int chk = (0,1); 
printf("%d",chk); 

這是你如何知道(0,1)的值。如果您想了解更多詳情,請參閱:this


因此arr[0,1]是相同arr[1]