使用点(。)运算符代替 - >运算符C ++

时间:2014-12-08 00:41:32

标签: c++

假设我定义了一个名为date_ptr的指针结构,该结构已经定义了一个结构,如下所示:

Date *date_ptr = new Date[10]

本质上,这是一个包含Date类型对象的结构数组。现在让我们说我想设置数组中每个结构的月份:

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

我的问题如下:我允许使用点运算符而不是 - >设置每个结构的月份变量。即使date_ptr是指向结构的指针。如果是这样,这会导致任何问题吗?或者更好(或强制)使用 - >操作

4 个答案:

答案 0 :(得分:2)

在您的情况下,data_ptr是一个指针,但data_ptr [0]不是指针,而是Date类型的对象。因此,您只能使用点(。)而不能使用 - >访问日期字段。

答案 1 :(得分:1)

date_ptr是指向结构的指针,但date_ptr[0]是对结构的引用。这是因为date_ptr[0]*(date_ptr+0)相同。因此必须使用.

答案 2 :(得分:1)

小心,这是一个包含0类型Date *的数组。特别是,以下代码将在没有正确初始化的情况下进行段错误。

无论如何回答你,->只是.等效代码的语法糖。您不需要使用它,您可以简单地编写date_ptr->month=0;并进行编译。或者(date_ptr+1)->month=0;代表第二个元素。

答案 3 :(得分:1)

你的意思是以下?这样可行。

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

如果涉及到多态性或者你会遇到一个不好的意外,请注意不要这样做。