高分请教c++牛人

来源:百度知道 编辑:UC知道 时间:2024/05/25 02:48:39
用new来开辟一个结构体的动态变量后,如果要调用其中的一个成员是用符号:(->)
同样,用new来开辟一个结构体数组的动态变量,如果用调用数组中其中一个结构体的成员却用:(.)
这是为什么呢?
能不能讲一下是根据什么逻辑才这样设的?

a[b]相当于*(a+b)
你可以试一下a[3]和3[a]都是可以运行通过的
数组名,其实一个指针比如int a[100];中的a
a[0]呢,就是*(a+0)
而new出来的数组是一个指针,new出来的变量也是一个指针,其中数组可以用[]运算符,变量只能用->了

没有为什么,语言的语法就是这么规定。

实在看不出来,写几行代码看看

struct st
{
int a ; char c; double d;
};

st * pst = new pst;
cout << pst->a;

st * past = new pst[10];
cout << past[5].a; 因为[]已经将指针解引用了,再用->当然就错。

因为你用[]就相当于已经取到了这个结构变量本身了,所以可以用.
->是为只有指向结构变量的指针这种情况而设计的.

new的作用是返回一个类型为该结构体的指针,指向开辟出来的结构体空间,由于是指针操作,所以用 -> 符号

数组名称本身就是一个指针(type a[] 和 type *a 等效,但type a[101]和type *a不等效),而访问数组元素的方法是 a[i],或者 *(a+i),开辟结构体数组返回的就是一个指针,指向数组的第一个元素,如果访问数组元素的话,就不是一个指针,而是一个实例,调用成员当然要用“.”