假设我有一段代码:
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?
存在同样的问题。这是一个达到定义分析的特殊情况,还是需要特殊算法来处理它?</ p>
答案 0 :(得分:0)
您需要了解更多指针的工作原理 想象一下,你有1台电视和2个遥控器 在第一个例子中,变量x(遥控器)具有值(100)和地址(TV)。现在有一个指针* p指向与x相同的地址(第二个遥控器指向同一个电视)。 当您更改* p的值(电视频道)时,您希望相应地更改x的值。所以现在* p和x都保持值20(相同的电视频道)和相同的地址(同一电视的2个遥控器)
我希望现在更清楚了
答案 1 :(得分:0)
我不确定我是否理解正确达到定义,但这里是:
在您的第一个示例中,*p = 20
是您的定义,因为它将值20
分配给x
。
在您的第二个示例中,*p = 20
中的sub()
再次是您的定义,因为它会将值20
分配给x
。
p
包含x
的地址,*p =
修改p
保存的地址中存储的值。