【发布时间】:2020-09-01 22:19:50
【问题描述】:
为什么 op 是 20 ??不是 10 吗?我认为op应该是10,但我不知道发生了什么?请你一步一步解释一下吗
void fun(int *ptr)
{
int q=10;
ptr=&q;
}
int main()
{
int r=20;
int *p=&r;
fun(p);
printf("%d",*p);
return 0;
}
【问题讨论】:
-
1.
ptr=&q更改 local 变量而不是调用者的变量。 2.q也是一个局部变量,函数退出后不再存在。试图在调用者中访问该内存是未定义的行为。 -
C 是 pass-by-value 所以
fun接收到来自main()的指针的副本 在您尝试的ptr并更改 address-held-byptr而不是 value-at-the-original-address(例如*ptr = q;)。对副本保存的地址所做的更改在函数返回时丢失。 -
@kaylum,你想把它作为答案发布吗?
标签: c function pointers parameters pass-by-value