2014-12-08 58 views
0

比方說,我定義名爲date_ptr已經定義的結構的指針結構,方式如下:使用點運算符,而不是 - >運算符C++

Date *date_ptr = new Date[10] 

本質上,這是一個包含對象結構的數組類型爲Date。現在,讓我們說,我想設置陣列中的每個結構月份做:

date_ptr[0].month = new int(10); 
date_ptr[1].month = new int(3); 

我的問題是:我是允許使用點運算符,而不是設置每個結構月份變量 - >即使date_ptr是指向結構的指針。如果是這樣,這是否會導致任何問題?或者更好(或強制)使用 - >運算符?

+3

爲什麼不嘗試呢? – 2014-12-08 00:43:10

+0

如果你不是 - 相信我,編譯器會錯誤地提到它 – Adrian 2014-12-08 00:46:03

回答

1

date_ptr是指向結構的指針,但是date_ptr[0]是對結構的引用。這是因爲date_ptr[0]*(date_ptr+0)相同。所以必須使用.

+0

如果「月」定義爲int *月,該怎麼辦?那我用 - >來引用date_ptr [0]? – Adam 2014-12-08 00:45:51

+2

'月'的類型與它無關。 – cubuspl42 2014-12-08 00:47:29

1

小心,這是一個包含0 s的數組Date *。特別是,以下代碼會在沒有正確初始化的情況下進行段錯誤

無論如何回答你,->只是與.等效代碼的語法糖。你不需要使用它,你可以簡單地編寫date_ptr->month=0;,它會編譯。或者第二個元素爲(date_ptr+1)->month=0;

2

在你的情況,data_ptr是一個指針,但data_ptr [0]不是一個指針,而是一個Date類型的對象。因此,您只能使用點(。),而不能使用 - >訪問日期字段。

1

你的意思是以下嗎?這會工作。

Date * end_ptr = date_ptr + 10; 
for (Date * ptr = date_ptr; ptr != end_ptr; ++ptr) 
    ptr->month = 1; 

被警告不要這樣做,如果涉及多態性,或者你會遇到一個不好的驚喜。