1

假设我有一段代码:

int x = 100;
int* p = &x;
*p = 20;
print(x);    //<= reaching defitition of x?

执行时会输出 20。
问题是哪个语句是到达定义print(x),初始赋值还是指针赋值?

同样在以下代码中:

void sub(int* p)
{
    *p = 20;
}

int x = 100;
sub(&x);
print(x);    //<= reaching defitition of x?

存在同样的问题。它是达到定义分析的特例,还是需要特殊的算法来处理它?

4

2 回答 2

0

您需要了解更多指针的工作原理 假设您有 1 个电视和 2 个遥控器 在第一个示例中,变量 x(遥控器)有一个值 (100) 和地址 (TV)。现在出现了一个指针 *p,它指向与 x 相同的地址(同一电视的第二个遥控器)。当您更改 *p 的值(电视频道)时,您期望 x 的值会相应更改。所以现在 *p 和 x 都持有值 20(相同的电视频道)和相同的地址(同一台电视的 2 个遥控器)

我希望它现在更清楚一点

于 2012-07-07T14:02:51.057 回答
0

我不确定我是否正确理解了达到定义,但这里是:

在您的第一个示例中,*p = 20是您的到达定义,因为它将值分配20x.

在您的第二个示例中,再次*p = 20sub()您的到达定义,因为它将值分配20x.

p包含地址x*p =修改保存在地址中的值p

于 2012-07-07T14:04:25.893 回答