2014-12-08 129 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; 

被警告不要这样做,如果涉及多态性,或者你会遇到一个不好的惊喜。