标签:先后 地址 访问 没有 状态 ++ 初始 ref 不能
指针是 “ 指向 ” 另外一种类型的复合类型。
与引用(reference)不同之处在于:
指针本身就是一个对象,允许对指针进行复制和拷贝,而且在其生命周期内可以先后指向几个不同的对象;
指针无需在定义是赋予初值,此时它将拥有一个不确定值。但是建议初始化所有指针,这样可以避免一些不必要的错误。
注意:
试图拷贝或以其他方式访问无效指针的值都将引发错误,但是编译器并不负责检查此类错误!
第2、3种形式的指针是有效的,但是同样受到限制, 试图访问此类指针对象的行为也是不允许的!
指针存放某个对象的地址,要获得该地址需要取地址符(&).
int ival = 5;
int *p = &ival; // p存放变量ival的地址、或者说p是指向变量ival的指针
一般情况下,指针的类型需要与它所指的对象严格匹配!
指针指向了一个对象,则允许使用解引用符(*)访问该对象.
int ival = 5;
int *p = &ival;
cout << *p;
空指针不指向任何一个对象,在试图使用一个空指针之前可以首先检查其是否为空.
几种生成空指针的方法:
int *p1 = nullptr; // C++11新标准, 最好使用新标准
int *p2 = 0;
int *p3 = NULL; // 需要cstdlib,等价于上一种方法
不能直接将int变量赋给指针,即使变量值为0
void*是一种特殊的指针类型,可用于存放容易对象的地址.
指针是一个对象,与其他对象一样也有自己的地址,因此允许吧指针的地址再放到另外一个指针去.
int ival = 2;
int *pi = &ival;
int **ppi = π
解引用得到ival的值:
cout << *pi << endl;
cout << **ppi << endl;
引用本身不是一个对象,因此不能定义指向引用的指针;但是指针时对象,所以可以存在指向指针的引用。
int ival = 2;
int *p; // p是一个int型指针
int *&r = p; // r是一个对指针p的引用
r = &ival; // r引用了指针p,该语句为令p指针指向ival
*r = 0; // 解引用得到ival, 该语句为将ival的值改为0
标签:先后 地址 访问 没有 状态 ++ 初始 ref 不能
原文地址:https://www.cnblogs.com/linzijie1998/p/11528924.html