假设我定义了一个名为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是指向结构的指针。如果是这样,这会导致任何问题吗?或者更好(或强制)使用 - >操作
答案 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;
如果涉及到多态性或者你会遇到一个不好的意外,请注意不要这样做。