目录
指针
什么是指针
我们常说指针指向
某个对象,是因为指针存放某个对象的地址,通过该地址可以达到间接访问该对象的目的
指针的使用
指针的定义
- 声明变量时,要在变量名前加
*
符号 - 如果在一条声明语句中定义了多个指针变量,每个变量前都要加
*
符号
int *ip1=nullptr,*ip2=nullptr;//ip1和ip2都是指向int类型的指针
double d,dp1=nullptr;//d是double型变量,dp1是指向double类型的变量
获取对象地址
我们需要将一个地址值传给一个指针变量,而取地址符&
可以用来获取对象的地址,对于数组,其数组名就是数组的首地址。
间接访问对象
如果指针指向了一个对象,则允许使用解引用符*
来访问该对象
&p1类型是int**,相当于是指针的指针
int ival = 10;
int iarr[5] = {
1,2,3,4,5 };
int *ip1 = &ival;//此时ip1存放变量ival的地址,或者说ip1是指向变量ival的指针
int *arrp = iarr;//此时arrp存放数组iarr的首地址,或者说arrp是指向数组iarr的指针
指针的初始化
-
通常指针的类型必须和所指向对象的类型一样,除了下面两个例外
-
指向常量的指针可以指向非常量对象
int ival=10; const int *ip=&ival//正确,但是不能通过ip来改变ival的值,即*ip=11是错误的
-
基类的指针可以指向其派生类对象
虽然指针无需在定义时赋值,但是未经初始化的指针常常会引发运行时错误。
如果使用了未经初始化的指针,则该指针所占内存空间的内容被看作一个地址值,访问该指针相对于访问一个本不存在的位置上的不存在的对象。
建议初始化所有指针,如果一开始不知道指针指向某个对象,可以将它初始化为nullptr,这样程序就能检测并知道它没有指向任何具体的对象。
指针的赋值
给指针赋值其实就是使指针变量存放一个新的地址,从而指向一个新的对象;
但是有时候我们容易搞混,到底是改变了指针的值还是改变了指针所指向对象的值
记住
:赋值永远改变的是等号左侧的对象
int main()
{
int ival1 = 10;
int ival2 = 20;
int *ip1 = &ival1