2012-03-29 86 views
0

這是在課堂上給我們的例子。有人可以向我解釋爲什麼這會打印29個地址而不是29個「0」(零)?C++:用於循環打印地址而不是值的數組

int num[29];是一個數組,它爲29個整數留出29個地址-i得到那個部分,但是在for循環中,你不是在這些addreses而不是地址本身打印值?

另外,(num+i)(num[]+i)之間的區別是什麼?

我有點糊塗..

#include <iostream> 
#include <cmath> 

using namespace std; 

int main(){ 
    int num[29]; 
    for (int i=0;i<29;i++) 
     cout << (num+i) << endl; 

    return 0; 
} 

回答

8

原因打印地址是

(num+i) 

是陣列的i個元素,而不是i個元素的地址本身。如果你想獲得i個元素,你可以寫

*(num + i) 

,或者甚至更好:

num[i] 

關於你的第二個問題 - 語法(num + i)的意思是」地址i對象過去開始的num和語法(num[] + i)是不合法的C或C++。

希望這有助於!

3

的聲明如:

int num[29]; 

定義的29個整數的連續陣列。

要使用num[i]訪問數組的元素,其中i是索引(從第一個元素的0開始)。

表達式num本身給出了數組第一個元素的指針(內存地址和類型)。

表達式ptr + i(其中ptr是一個指針,i是一個整數)計算爲一個指針,它是我在ptr之後定位的指針(以指針類型爲單位)。

所以num + i給出了一個指向索引爲i的元素的指針。

表達式&a給出了一個指向某個對象a的指針。

表達式*ptr給出了某個指針ptr指向的對象。

所以表達式a*(&a)是等價的。

所以num[5]相同*(num+5)

num+5相同&num[5]

num相同&num[0]

當您打印終場前COUT,它會顯示其地址。

當您打印一個對象時,它將打印該對象的值。

所以

cout << num + 5; 

將打印第五地址NUM的(零索引)元件

cout << num[5]; 

將打印第五的值(零索引)元素號碼

相關問題