您的位置:首页 > 其它

初学者的问题 关于->与.的区别

2008-02-25 10:06 302 查看
结构变量的引用:
定义结构变量之后就可以利用它存取具体结构数据,系统对结构变量所提供的运算有赋值(=)、直接指定成员(.)和间接指定成员(->)三种,这三种运算符(即=,.和->)分别称为赋值运算符、直接成员运算符(又称点运算符)和间接成员运算符(又称箭头运算符)。它们都是双目运算符,并且成员运算符同下标运算符和函数运算符一样具有最高的优先级,而赋值运算符的优先级较低。
赋值运算符的两边为同类型的结构变量,即为同一结构类型标识符所定义的变量,运算功能是把右边变量的值拷贝到左边变量中,即拷贝到左边变量所对应的存储空间中,运算的结果为左边的变量。赋值号可以连续使用,并且规定结合性为从右到左,所以若z1,z2和z3为同类型的结构变量,则赋值语句z3=z2=zl的执行过程是首先把zl赋给z2,再接着把z2赋给z3,使得z3和z2都具有z1的值。 注意:不同类型的结构变量不能进行此运算。
直接成员运算符的左边是一个结构变量(包括结构数组中的元素),右边是该结构变量中的一个成员,运算结果是一个结构(变量)中的成员变量。如x.a表示x中的成员变量a;x.b.t表示x中b成员内的成员变量t,其中b又是x中的结构成员;vec[5].name表示结构数组vec中第5号元素内的成员变量name。一旦定义了结构变量,就可以使用点操作符"."来访问结构中的成员。
间接成员运算符的左边是一个结构指针变量,右边是该结构指针变量所指结构中的一个成员,运算结果是一个指针所指结构中的一个成员变量。如p->a表示p指针所指向结构中的成员变量a,它可以等价表示为(*p).a,其中括号内为p指针所指的结构变量,此处用括号是必须的。若写成*p.a是错误的,因为成员运算符的优先级高于取内容运算符的优先级,这样先做的是点运算,而不是星号运算;p->c->n表示p指针所指结构中的指针成员c,再接着得到由c所指结构中的成员变量n,它可以等价表示为(*p).c->n,(*(*p).c).n或(*p->c).n;1ist
->wage表示结构指针数组1ist中第n号元素所指结构中的成员变量wage。
C十十中的其他运算符,如算术运算符和关系运算符等,只有通过以后学习的运算符重载函数定义后才能够应用到结构变量上,否则是不能施加于结构类型的变量的。
通过成员运算符(直接或间接)能够得到结构中的成员变量,每个成员变量与相同类型的简单变量或数组元素一样,能够作为左值或右值参与该类型所具有的各种运算。
引用时应注意的问题:
(1) 不同类型的结构变量不能进行赋值运算。
(2) 当用点操作符时,它的左边应是一个结构变量,当用箭头操作符时,它的左边应是一个结构指针。
(3) 箭头操作符与点操作符是可以互换的。
(4) 指针是有类型的:定义结构指针时,必须指明是指向哪种结构变量的指针,一旦定义,此指针只能指向规定结构类型的变量,不能指向其他类型的变量。
(5) 结构是一个数据类型,所以可以拥有结构数组。要定义结构数组,必须先声明一个结构,然后定义这个结构类型的数组。此数组中的所有元素均具有相同的结构。
(6) 结构可以按值传递,这种情况下整个结构值都将被复制到形参中去。

例子:

class A
{
***********
}
如果是 A *a =new A;
则用 A->***
如果是A a;
则用A.***
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: