你可以通过解除引用指针返回一个整数吗?

use*_*790 2 c++ pointers undefined-behavior

int f(int *x)
{
    *x = 5;
    return *x;
}

int main()
{
    int * y = 0;
    int z = f(y);
}
Run Code Online (Sandbox Code Playgroud)

为什么这段代码会给我一个运行时错误?

hmj*_*mjd 10

为什么这段代码会给我一个运行时错误?

因为y是一个NULL指针,它被解除引用f().注意,取消引用NULL指针是未定义的行为.

你可以通过解除引用指针返回一个整数吗?

是的,假设指针指向有效int.例如:

int main()
{
    int y = 0;
    int z = f(&y);
}
Run Code Online (Sandbox Code Playgroud)


小智 7

如果指针指向某个有效内存,则可以.在您的情况下,您将取消引用NULL(0x00)指针,这是未定义的行为(也称为UB).例如,这可以正常工作:

int f(int *x)
{
    *x = 5;
    return *x;
}

int main()
{
    int value = 1986;
    int *y = &value; // Point to something valid.
    int z = f(y);
}
Run Code Online (Sandbox Code Playgroud)