一、传递地址
实参传递进函数体内后,生成的是实参的副本,在函数内改变副本的值并不影响实参。指针传递参数时,指针变量产生了副本,但副本与原变量指向的内存区域是同一个。改变指针副本指向的变量,就是改变原指针变量指向的变量。
调用自定义函数交换两个变量的值
运行结果如下所示。
swap函数是自定义的重载函数,在main函数中调用该函数交换变量a和b的值。
二、指向函数的指针
指针变量可以指向一个函数。一个函数在编译时被分配给一个入口地址,这个函数入口地址就称为函数的指针。
一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。返回指针值的函数简称为指针函数。
定义指针函数的一般形式为:
类型名 *函数名(参数列表);
使用指针函数进行平均值计算
运行结果如下所示。
三、从函数中返回指针
定义一个返回指针类型的函数,形式如下:
int* fun(参数列表){
...; //执行过程
return p;
}
p是一个指针变量,也可以是&value的地址值。当函数返回一个指针变量时,得到的是地址值。
指针做返回值
运行结果如下所示。
值为NULL的指针地址为0,但不意味这块内存不可以使用。
四、指针数组
一维指针数组的定义形式为:
类型名 *数组名[数组长度]
例如:int *p[4];
指针数组中的数组名也是一个指针变量,该指针变量为指向指针的指针。例如:
int *p[4];
int a=1;
*p[0]=&a;
p是一个指针数组,它的每个元素都是指针型数组(值为地址),指针数组p的第一个值是变量a的地址。指针数组中的元素可以使用指向指针的指针来引用。例如:
int *(*p);
第一次进行*运算获取的是一个地址值,在进行一次指针*运算才可以获取具体值。
用指针数组中的各个元素分别指向若干个字符串
运行结果如下所示。
在print函数中,数组名name代表该指针数组首元素的地址,name+i是name[i]的地址。设置一个制指针变量p,指向指针数组中的元素。 利用指针变量访问另一个变量就是间接访问。如果在一个指针变量中存放一个目标变量的地址,就是单级间址。指向指针的指针使用的是二级间距。
五、结言
感谢各位读者的阅读与参与,您的支持是我前进的动力!博主Ordinary会一直陪你复习C++语法,谢谢!