我正在瀏覽一個有一些c FAQ的webpage,我發現了這個說法。c和數組邊界中的指針算術
類似地,如果有10種元素和ip 指向[3],你不能計算或 接入IP + 10或IP - 5.(有 一種特殊情況:在能,在這種 情況下,計算,但不連接, 指針不存在的元素 剛好超出數組的末尾, 在這種情況下是&一個[10]。
我感到困惑由聲明
你不能計算IP + 10
我能理解訪問元素出界是不確定的,但計算!!!
我寫了下面的代碼片段其計算(讓我知道這是什麼網站計算的意思)的指針出界外。
#include <stdio.h>
int main()
{
int a[10], i;
int *p;
for (i = 0; i<10; i++)
a[i] = i;
p = &a[3];
printf("p = %p and p+10 = %p\n", p, p+10);
return 0;
}
$ ./a.out
p = 0xbfa53bbc and p+10 = 0xbfa53be4
我們可以看到p + 10指向過去p的10個元素(40個字節)。那麼網頁中的聲明究竟意味着什麼。我誤解了一些東西嗎?
即使以K & R(A.7.7)該語句是由:
+運算的結果是操作數的 總和。可以添加指向數組中的 對象的指針和任何 整數類型的值。 ... 總和是與原始指針 相同類型的指針,並且指向 同一數組中的另一個對象 與原始對象 適當偏移。因此,如果P是指向數組中的對象的指針,則表達式P + 1 是指向 陣列中的下一個對象的指針。 如果總和指針指向 超出數組範圍, 除了第一個位置超出 高端,結果是 未定義。
什麼是「未定義」的意思。這是否意味着總和將是未定義的,還是僅僅意味着當我們取消引用時,行爲是未定義的。即使我們沒有對它進行解引用並且只是計算指向元素出界的指針,該操作也是未定義的。
這意味着此特定位置的內容未定義(隨機)。 – bioffe 2011-03-17 16:01:50
未定義表示獲得您所期望的與將銀行帳戶中的錢轉入我的銀行帳戶一樣糟糕。繼續編碼未定義的結構...總有一天會發生意想不到的事情......我將帶着我的夢想假期:) – pmg 2011-03-17 16:12:58