2011-05-24 67 views
7

a是整數數組,如果我嘗試減去地址值&a[2] - &a[1] == ? 結果應該是4還是1?C++:&a [2] - &a [1] ==?

編輯:看第4條回覆熱門問題here他爲什麼說1?這就是爲什麼我很困惑我認爲這將是4

編輯:這裏是一個test

+5

當你運行它時你會得到什麼? – 2011-05-24 05:34:50

+3

@disioe :你沒有編譯器?那你爲什麼要寫代碼? – 2011-05-24 05:40:06

+0

@Mitch小麥:我不是我只是不能睡覺,所以我正在閱讀stackoverflow :))我在C#程序的錢。但實際上我打算在codepad.org上嘗試它,但現在不工作,所以我決定詢問 – disioe 2011-05-24 05:41:35

回答

9

&a[2]是相同&(*(a + 2))(即(a + 2))和&a[1]是相同&(*(a + 1))(即(a + 1))。所以回答將是1.

+0

非常感謝,我現在明白了。它在我讀的線程中,但不知何故,我沒有得到它。再次感謝你的幫助。 – disioe 2011-05-24 05:48:40

+0

@disioe沒問題。 – 2011-05-24 05:51:58

6

指針減法讓你在元素,不是字節的差異。無論數組的元素類型是什麼,&a[2] - &a[1]的結果將始終爲1,因爲它們相距1個元素。

3

區別必須是1.當您比較指針時,您將始終獲得元素的差異。

4

它總是1.指針算術不關心每個元素有多少個字節,這是非常有用的。比較這些:

ptr++; // go to the next element (correct) 
ptr += sizeof *ptr; // go to the next element (wrong) 

當你使用數組你通常在元素感興趣,而不是在字節包括他們,這就是爲什麼用C指針算術已被定義這種方式。

2

既然這是C++,我會假設你沒有覆蓋&*運營商在任何類型a是。自掃門前雪,如下所示的是真實的:

&a[2] - &a[1] 
(a + 2) - (a + 1) 
a + 2 - a - 1 
2 - 1 
1 
+1

很好的派生。 – harper 2011-05-30 11:06:49

1

一對夫婦在這裏的答案(刪除,因爲這個答案被張貼)顯然有字節*記住:

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.

+1

這是我的問題,因爲問題不在代碼中,所以我讀了兩個地址之間差異的問題,而不是「指針算術」。 – Jens 2011-05-24 07:32:06

相關問題