作者:hanhan2502883243 | 来源:互联网 | 2023-12-13 12:54
本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。
指针作为参数
先明确一下指针的概念,指针存放的是变量的地址。
在函数调用时用指针做参数,表示把变量的地址传递给子函数。但是子函数只能修改指针所指的变量的值,并不能修改指针的指向。
如果想要修改指针的指向,就要用指针的引用(指针的指针也可以,但是这里只谈指针的引用)。
例子
先拿最简单的main函数里的变量来举例子
#include
using namespace std;
int main() {
int a = 4;
int b = 3;
//指针p存放a的地址
int* p = &a;
//再用指针s存放p中存放的东西
int *s = p;
//这时改变指针s,指针s存放b的地址
//思考一下,取指p,输出的是什么?
s = &b;
cout <<*p;
return 0;
}
无疑取值p输出的结果是4,因为改变了指针s存放的变量地址,不会改变p存放的变量地址。
明确输出指针p和指针s改变前后存放的变量地址:
#include
using namespace std;
int main() {
int a = 4;
int b = 3;
int* p = &a;
//更改为指针的引用
int* &s = p;
//这时改变指针s,指针s存放b的地址
//思考一下,取指p,输出的是什么?
s = &b;
cout <<*p;
return 0;
}
这里的取值p也是3,因为指针s是引用,是p的别名,改变指针s存放的东西,实际上也是改变指针p存放的东西。
再深层一点解释,指针p和指针s都会有他自己的地址,结合例子1和2一起解释:
说完基本的,再说函数中的指针引用参数
#include
using namespace std;
//传指针
void test(int* num) {
int a = 3;
num = &a;
}
int main() {
//指针s存放a的地址
int a = 4;
int* s = &a;
test(s);
//取值s输出是什么,思考一下
cout <<*s <
结合开头说到的,函数传进去的是变量的地址,需要注意的是指针num和指针s不一样,只是存放的东西相同:
如果想操作指针s的指向,那就得传指针的引用到函数中
#include
using namespace std;
//传指针的引用
void test(int* &num) {
int a = 3;
num = &a;
}
int main() {
//指针s存放a的地址
int a = 4;
int* s = &a;
test(s);
//取值s输出是什么,思考一下
cout <<*s <
如果传指针的引用,取值s输出的是函数中改变后的值,3。
什么情况下使用指针的引用