簡體   English   中英

數組值為負一

[英]Array values at negative one

存儲在-1的數組中是否有某個值具有任何影響? 會對程序或計算機產生不良影響嗎? 我真的很好奇,我是編程的新手,我得到的任何澄清都對我有所幫助,謝謝。

無法將任何內容存儲在索引為-1的數組對象中。 僅嘗試獲取指向該不存在元素的指針將導致未定義的行為。

在基本指針不是數組對象本身而是指向另一個數組對象中間的獨立指針的情況下,負索引(如-1 )可能出現在類似數組的上下文中,例如

int a[10];
int *p = &a[5];

p[-1] = 42; // OK, sets `a[4]`
p[-2] = 5; // OK, sets `a[3]`

但是任何在實際數組開始之前訪問不存在的元素的嘗試都會導致未定義的行為

a[-1]; // undefined behavior
p[-6]; // undefined behavior

您會看到是否嘗試通過在括號中指向一些值來獲取數組元素,基本上是在指定距內存地址的偏移量(乘以分配類型的大小)。 如果您以int *a = new int[N]類的典型方式分配了數組,則允許使用的內存從地址aa + <size of memory allocated> (在這種情況下為sizeof (int) * N ),因此嘗試通過索引-1獲取值,您就超出了數組的范圍,它肯定會導致錯誤或程序崩潰。

當然,您的內存指針可能不是某個分配的序列開頭的指針,例如(考慮前面的示例) int *b = a + 1 ,在這種情況下,您(至少編譯器允許)可以取a[-1] ,它是有效的,但是由於很難管理這樣的代碼的正確性,因此我仍然建議反對。

暫無
暫無

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

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