C++ - Google 练习代码中指向局部变量的指针

C++ - Pointer to local variable in Google's exercise code

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 这是一个局部变量(参数的副本)。指向局部变量的指针。

稍后,在主函数中,作为第一个参数传递的指针在调用后使用。这不应该是未定义的行为吗?在调用 HardToFollow() 之后,作为第一个参数传递的指针不应该是未定义的吗?

编辑: 我知道这不是未定义的行为,指针本身可以更改而不反映传递参数的行为,只有指向值的更改才是永久的.

请记住,默认情况下所有参数都是按值传递的。这意味着传递的表达式的值被复制到函数局部参数变量中。这也意味着改变参数变量(比如给它赋值)只会改变局部参数变量本身,而不是调用函数时使用的原始值。

这就是这里发生的事情:有人调用传递指针的 HardToFollow 函数。该指针的值被复制到局部参数变量 p 中。对 p 本身的任何赋值将 修改局部变量 p.

所以不,这不会导致 UB,这是完全有效的。