相同點:兩個都是二元操作符,其右操作符是成員的名稱。
不同點:點操作符左邊的操作數是一個“結果為結構”的表達式;
箭頭操作符左邊的操作數是一個指向結構的指針。
- 點運算是結構體變量訪問其成員的操作符
- 箭頭運算是結構體指針訪問其指向成員變量的操作符
首先介紹一下C++中的結構。對於一個結構來說,
struct MyStruct
{
int member_a;
};
如果有個變量MyStruct s,那么使用其中的成員元素時可以用
s.member_a = 1;
如果采用指針方法訪問,比如MyStruct * ps,那么同樣的訪問就必須使用如下形式:
(*ps).member_a = 1;
或者
ps->member_a = 1;
c++中當定義類對象是指針對象時候,就需要用到->指向類中的成員;當定義一般對象時候時就需要用到"."指向類中的成員.......
例如:
class A
{
public
play();
}
如果定義如下:
A *p則:p->play()使用; 左邊是結構指針。
A p 則:p.paly()使用; 左邊是結構變量。
總結:
箭頭(->):左邊必須為指針;
點號(.):左邊必須為實體。
struct {
int len;
char *str;
} *p;
*p->str 讀取的是指針str 所指向的對象的值;*p->str++先讀取指針str 指向的對象的值,然后再將str 加1(與*s++相同);(*p->str)++將指針str 指向的對象的值加1;*p++->str先讀取指針str指向的對象的值,然后再將p加1。