定义
定义:*变量名:
、
指针存放某个对象的地址,要想获取这个地址,需要用到取地址符&:
如果指针指向了一个对象,则允许使用解引用符*(如果我们要操作一个指针,必须确保它是有效指针),来访问操作对象:
在指针的声明周期中,可以通过给指针赋值(也就是存放一个新的地址),令它指向一个新的对象:
如果我们想要直到一条赋值语句改变的是指针还是指向指向的对象,可以通过记住赋值永远改变的是等号左侧的对象:
一般来讲,指针的类型必须与所指对象的类型一致,但是有两个例外:
- 允许一个指向常量的指针指向一个非常量对象。指向常量的指针仅仅要求不能通过该指针改变对象的值,但是没有规定那个对象的值不能通过其他途径改变
ps:*与&在不同的语境下有不同的含义:
空指针
空指针表示不指向任何对象:
建议:初始化所有指针,如果实在不清楚指针应该指向何处,就把他初始化为
0或者nullptr,这样程序就能检测到它没有指向任何对象了
void*指针
void*是一种特殊的指针类型,可以用于存放任何对象的地址:
指向指针的指针
可以通过*的个数区分指针的级别:
指向指针的引用
引用本身不是一个对象,因此不能定义指向引用的指针
指针是对象,所以存在对指针的引用
如何区分变量的类型:从右到左读,离变量名最近的符号对变量的类型有最直接的影响
指针 VS 引用
指针和引用一样,实现了对其他对象的间接访问。
指针和引用的不同:
- 指针本身就是一个对象,允许对指针赋值和拷贝,在指针的生命周期内可以先后指向不同的对象
- 引用本身并非一个对象,一旦定义了引用,就无法解绑,让它指向不同的对象了
- 引用定义的时候必须初始化, 指针无须在定义时给予初值(不推荐这样做)