达到涉及指针的定义

时间:2012-07-07 13:48:35

标签: c compiler-construction analysis

假设我有一段代码:

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>

2 个答案:

答案 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保存的地址中存储的值。