为什么这段C++程序使用指针而非普通变量?代码功能如何实现?
C++代码逻辑及指针相关问题解答
代码执行流程梳理
- 程序启动后首先进入
main函数,先声明两个int类型变量a、b,用于存储后续用户输入的整数 - 定义两个int型指针
pa、pb,分别存储变量a的内存地址(&a为取地址操作符,作用是拿到变量对应的内存地址)和变量b的内存地址 - 通过
cin读取用户输入的两个整数,分别赋值给a和b - 调用
update函数,将pa、pb两个指针作为参数传入,本质上是把a和b的内存地址传递到update函数中 - 进入
update函数后,形参a是指向main中变量a的指针,形参b是指向main中变量b的指针;这里的*a是解引用操作,作用是拿到指针指向的内存中存储的实际数值,也就是main里a的值,*b同理对应main里b的值 - 计算两个数值的和存入
sum变量,计算两个数值的差,若差为负数则乘以-1得到绝对值 - 打印求和结果和绝对差值,
update函数执行完毕后返回main函数,程序正常结束返回0
指针使用的相关说明
你当前提供的这段代码里,使用指针属于非必要的写法,直接传递普通int变量也可以实现完全相同的效果。
C++中需要使用指针/引用做函数参数的典型场景是:函数需要修改外部传入的原变量内容。因为普通的值传递会拷贝参数的副本,函数内部修改副本不会影响外部的原变量;而传递指针可以让函数直接操作原变量对应的内存空间,实现修改原变量的效果。
你这段代码里的update函数只读取了两个输入值做计算和打印,没有修改原变量的需求,所以完全可以改成值传递的写法,运行效果没有任何区别:
// 改为值传递的update函数 void update(int a, int b) { int sum = a + b; int abs = a - b; if (abs < 0) abs *= -1; cout << sum << '\n' << abs; } // main中调用方式也可以简化 int main() { int a, b; cin >> a >> b; update(a, b); return 0; }
这段代码大概率是教学场景中为了演示指针的基本定义、地址传递、解引用操作的用法,才刻意使用了指针参数,帮助初学者理解指针的基础逻辑。
内容的提问来源于stack exchange,提问作者NerdNet
相关产品推荐
相关产品推荐

