簡體   English   中英

多維數組和地址

[英]Multidimensional arrays and Addresses

我在c中編寫了以下代碼,只是為了檢查代碼是否會中斷:

int main(void)
{
    int A [5] [2] [3];
    printf("%d\n\n", A[6]);
    printf("%d\n\n", &A[6][0][0]);
    system("pause");
}

現在,代碼沒有中斷,這是我沒有想到的。 當我們聲明一個多維數組: int A [5][2][3] ,這在概念上並不意味着A處於其第一級是一個5個元素(0-4)的一維數組,該元素的每個元素數組本身就是2個元素的一維數組,而該數組的每個元素都是3個元素的一維數組? 如果這個概念是正確的,那么A[6][0][0]怎么可能存在-因為在第一級中我們只有5個元素(基於0)。

任何幫助將不勝感激。

您正在訪問數組外部的位置,沒有A[6] 那是不確定的行為,任何事情都可能發生。

請注意, A[5]是一個定義明確的位置(位於數組的末尾),因此獲取指向它的指針是合法的,但嘗試訪問該指針則不可行。 但是,完全沒有定義指向A[6]或任何其他更大索引的指針。

C不做數組邊界檢查。 對於int A[4] ,將A[5]視為指針算法: *(A + 5)

即使A僅用5個元素(0-4)聲明,C仍允許您使用A來引用數組聲明范圍之外的內存。

此訪問的結果是不確定的。 如果您讀A[5] ,可能會產生垃圾; 如果您寫A[5] ,即A[5] = 13 ,則可能損壞另一個分配的內存塊。

Wiki文章是理解這一點的一個很好的開始,但是我建議您拿起K&R的副本,閱讀並做所有練習。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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