2012-07-07 34 views
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

「達到定義」是什麼意思? – Saphrosit 2012-07-07 13:52:36

+0

它的到達定義http://en.wikipedia.org/wiki/Reaching_definition – Kii 2012-07-07 13:58:41

回答

0

您需要了解更多的指針工作 如何假設你有1臺電視和2個遠程控制 在第一個例子中,變量x(遙控器)的值(100)及地址(TV)。現在出現一個指針* p,指向與x相同的地址(第二個遙控器指向同一個電視機)。 當您更改* p的值(電視頻道)時,您預期相應地更改x的值。所以,現在都* P,X裝值20(同一電視頻道),以及相同的地址(2個遙控器對同一電視)

我希望它更清楚一點,現在

0

我不知道,如果我理解正確地達到了定義,但這裏有:

在您的第一個示例中,*p = 20是您的到達定義,因爲它將值20指定爲x

在您的第二個示例中,中的*p = 20也是您的擴展定義,因爲它將值20指定爲x

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