a
是整數數組,如果我嘗試減去地址值&a[2] - &a[1] == ?
結果應該是4還是1?C++:&a [2] - &a [1] ==?
編輯:看第4條回覆熱門問題here他爲什麼說1?這就是爲什麼我很困惑我認爲這將是4
編輯:這裏是一個test
a
是整數數組,如果我嘗試減去地址值&a[2] - &a[1] == ?
結果應該是4還是1?C++:&a [2] - &a [1] ==?
編輯:看第4條回覆熱門問題here他爲什麼說1?這就是爲什麼我很困惑我認爲這將是4
編輯:這裏是一個test
&a[2]
是相同&(*(a + 2))
(即(a + 2)
)和&a[1]
是相同&(*(a + 1))
(即(a + 1)
)。所以回答將是1.
非常感謝,我現在明白了。它在我讀的線程中,但不知何故,我沒有得到它。再次感謝你的幫助。 – disioe 2011-05-24 05:48:40
@disioe沒問題。 – 2011-05-24 05:51:58
指針減法讓你在元素,不是字節的差異。無論數組的元素類型是什麼,&a[2] - &a[1]
的結果將始終爲1,因爲它們相距1個元素。
區別必須是1.當您比較指針時,您將始終獲得元素的差異。
它總是1.指針算術不關心每個元素有多少個字節,這是非常有用的。比較這些:
ptr++; // go to the next element (correct)
ptr += sizeof *ptr; // go to the next element (wrong)
當你使用數組你通常在元素感興趣,而不是在字節包括他們,這就是爲什麼用C指針算術已被定義這種方式。
既然這是C++,我會假設你沒有覆蓋&
或*
運營商在任何類型a
是。自掃門前雪,如下所示的是真實的:
&a[2] - &a[1]
(a + 2) - (a + 1)
a + 2 - a - 1
2 - 1
1
很好的派生。 – harper 2011-05-30 11:06:49
一對夫婦在這裏的答案(刪除,因爲這個答案被張貼)顯然有字節*記住:
int a[10];
byte * pA2 = (byte*)&a[2];
byte * pA1 = (byte*)&a[1];
int sz1 = &a[2] - &a[1];
int sz2 = pA2 - pA1;
CString msg;
msg.Format("int * %d, byte * %d\n", sz1, sz2);
OutputDebugString(msg);
輸出爲:
int * 1, byte * 4
兩個地址,但取決於地址存儲在變量的聲明,兩者之間的差異可以是1或4.
這是我的問題,因爲問題不在代碼中,所以我讀了兩個地址之間差異的問題,而不是「指針算術」。 – Jens 2011-05-24 07:32:06
當你運行它時你會得到什麼? – 2011-05-24 05:34:50
@disioe :你沒有編譯器?那你爲什麼要寫代碼? – 2011-05-24 05:40:06
@Mitch小麥:我不是我只是不能睡覺,所以我正在閱讀stackoverflow :))我在C#程序的錢。但實際上我打算在codepad.org上嘗試它,但現在不工作,所以我決定詢問 – disioe 2011-05-24 05:41:35