2016-05-22 73 views
1
#include <stdio.h> 
int main() 
{ 
int i; 
i=0; 
printf("%d\n%d\n%d\n", i, &i, &(&i)); 
return 0; 
} 

我認爲&我只是一個地址的值,並認爲它是0xFF的那麼&(&我)應該是爲0xFF的地址,但爲什麼它是不是有效?爲什麼&(&i)在C中無效?

+6

0xFF是什麼地址? –

+0

..因爲它比Mourinho接管Man U的意義不大。 –

+0

我的意思是說0xFF也是一個常量,所以應該有一個常數,指的是常量'0xFF'的地址 –

回答

7

一元運算符&運算符需要一個左值作爲其操作數並返回一個右值。 &i是一個右值,因此&i不能是&的操作數。

+1

在神祕的l/rvalues :http://stackoverflow.com/a/14752192/694576 – alk

+0

將 地址的變量視爲常量? – ameyCU

+0

@ameyCU;是的。 – haccks

2

6.5.3.2。

  1. 一元&運算符的操作數應是一個功能指示符,的結果的 []或一元*運算,或者,指定一個對象不是一個位域和是 不是左值用寄存器存儲類說明符聲明。

&i是對象的地址。

這意味着,一元&不能&i使用,作爲地址未指定一個對象或一個函數,也不是[]*操作符的結果。

你的例子實際上是:&0,而常數0顯然不屬於上面的列表。

1

不要混淆地址和指針。地址是一個右值。您不能將「地址」(&)運算符應用於其上。然而指針卻是對象。它們是左值,可以是操作數'&'。

0

簡單,就這樣看吧。你有一隻蜜蜂巢。我在一個廣場上放了一些蜂蜜。使用&操作符可以引用該方塊。再次使用&算子,你可以參考正方形所在的平方,你不能這樣做。

更確切地說&我指的是我的存儲位置。您不能參考內存位置的內存位置。