【发布时间】:2020-02-19 09:16:03
【问题描述】:
我做了一个简单的函数,使用指针简单地做参数之间的加法和绝对差,但是当我尝试更新指针时,指针仍然具有旧值。为什么会这样,或者我做错了什么:
#include <stdio.h>
#include <cstdlib>
void update(int *a,int *b) {
int temp = *a;
int temp2 = *b;
int temp3 =0;
temp3 = temp + temp2;
printf("%d",temp3);
*b = abs(*a - *b);
a = &temp3; // it is not updating
}
int main() {
int a, b;
int *pa = &a, *pb = &b;
scanf("%d %d", &a, &b);
update(pa, pb);
printf("%d\n%d", a, b);
return 0;
}
指针 a 没有更新,仍然在函数 update 中保留它的旧值
【问题讨论】:
-
请记住,默认情况下,C++ 中的函数参数是按值传递的,即值被复制到参数变量中。因此,当您修改
a时,您修改的是副本,而不是原始值(来自main函数的pa的值)。 -
此外,您尝试做的是让
a指向update函数内的local 变量。局部变量的生命周期在函数结束时结束,这样的指针会立即失效。