1. 程式人生 > 其它 >指標(&,*,->,.,NULL和nullptr)

指標(&,*,->,.,NULL和nullptr)

運算子:

1:& 取地址運算子,&a運算結果是一個指標,指標的型別是a的型別前加*,指標所指向的型別是a的型別, &a所指向的地址是a的地址。

2:* 間接運算子,p為指標,*p型別是p所指向的型別,佔用的地址也是p所指向的地址

例如:
int a=10; int * b=&a;
b=10; b為a的地址,b佔用的地址是a的地址。

指標和結構體的關係

1:-> :指向運算子
2:. : 成員運算子

對於一個結構體:

struct node{
  int a,b,c;
};
struct node  ans={1,2,3};
struct node *ptr =&ans;
//訪問 ans中的a
cout<<ans.a<<endl;//方法一
cout<<ptr->a<<endl;//方法二
cout<<(*ptr).a<<endl;//方法三
//int型別指標訪問 a,b
int * iptr= (int *)&ans;
cout<<*iptr<<endl;
cout<<*(iptr+1)<<endl;

null和nullptr

null : 實質為巨集定義,相當於0
C中:

#define NULL ((void *)0)

C++中:

#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif

nullptr :c++11後為了解決NULL在部分情況下可能被編譯器識別為整型的情況下引入, 代表空指標,在C++11支援的地方儘量選擇nullptr