【发布时间】:2020-04-22 05:29:32
【问题描述】:
Here,在练习#1中,有一个函数HardToFollow:
void HardToFollow(int *p, int q, int *num) {
*p = q + *num;
*num = q;
num = p;
p = &q;
Unknown(num, *p);
}
倒数第二行使p 指向q,这是一个局部变量(参数的副本)。指向局部变量的指针。
稍后,在 main 函数中,作为第一个参数传递的指针在调用之后使用。这不应该是未定义的行为吗?在调用HardToFollow() 之后,作为第一个参数传递的指针不应该是未定义的吗?
编辑:我明白这不是未定义的行为,可以更改指针本身而不反映传递参数的行为,只有对指向值的更改是永久性的。
【问题讨论】:
-
函数有问题,p 只是一个指针,虽然你可以在函数中更改指针的内容,但你不能更改它所指向的内容并在退出时获取新地址功能。解决这个问题的方法是改变:int p to int* p,然后在你的函数中分配给内容:**p = q + *num; *p = &q;未知也必须采取**p
标签: c++ pointers local-variables