使用点运算符,而不是 - >运算符C++
问题描述:
比方说,我定义名为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是指向结构的指针。如果是这样,这是否会导致任何问题?或者更好(或强制)使用 - >运算符?
答
小心,这是一个包含0
s的数组Date *
。特别是,以下代码会在没有正确初始化的情况下进行段错误
无论如何回答你,->
只是与.
等效代码的语法糖。你不需要使用它,你可以简单地编写date_ptr->month=0;
,它会编译。或者第二个元素为(date_ptr+1)->month=0;
。
答
在你的情况,data_ptr是一个指针,但data_ptr [0]不是一个指针,而是一个Date类型的对象。因此,您只能使用点(。),而不能使用 - >访问日期字段。
答
你的意思是以下吗?这会工作。
Date * end_ptr = date_ptr + 10;
for (Date * ptr = date_ptr; ptr != end_ptr; ++ptr)
ptr->month = 1;
被警告不要这样做,如果涉及多态性,或者你会遇到一个不好的惊喜。
为什么不尝试呢? – 2014-12-08 00:43:10
如果你不是 - 相信我,编译器会错误地提到它 – Adrian 2014-12-08 00:46:03