關於C語言取地址運算符”&“

關於C語言地址、取地址運算符”&“

2015-04-14  青島  張俊浩

今天在論壇貼吧看到關於C語言運算符”&“的問題,因爲之前自己學C語言時也遇到這個問題,就整理一下思路回帖,也順便整理成一篇博客~

問題如下:

int a;
scanf("%d",&a);
我們老師講,&是取地址符,但是我就奇怪,爲什麼叫取地址?
我們明明是想知道a是多少,而不是說它在哪,地址不是形容一個事物在哪嗎?我輸個10,a就是10了。


額,個人感覺C語言是門很”硬“的語言,因爲它相對其他高級語言更接近硬件底層,而相對於機器指令彙編又跳出了繁瑣的底層處理器指令編程。
無法理解”&“或者說”地址“、”取地址“,是因爲你站在高級(自然語言)語言的層面,而不是機器本身。任何變量都是數據,數據就會在硬件機器上有他的存儲空間,存儲空間有對應的位置,來方便我們操作這個存儲空間,比如內存,內存地址。
這裏我們定義了變量a,比如int a;實際上是預留了一個存儲空間,存儲空間有相應的位置,我們用符號”a“來指代,我們編譯高級語言的時候,編譯器會把我們所以對變量a的操作,轉化爲對相應存儲空間的操作。
對一塊存儲空間本質上有兩種操作,輸入和輸出。a = 1;//是對存儲空間的輸入,也就是我們稱的左值,把數據”1“寫入變量a對應的存儲空間;b= a;//是對存儲空間的輸出,把變量a所對應的內存中的數據輸出,也就是我們稱的右值,寫入變量b所對應的空間。
int scanf(char *format[,argument,...]); 函數中參數其調用格式爲: scanf("<格式化字符串>",<地址表>);
如果寫做scanf("%d",a);我們是把變量a所在的存儲空間中的數據作爲右值輸出,而在scanf中a變量的值作爲鍵盤終端字符輸入存儲空間的地址,而這顯然是不合理的,因爲我們要把鍵盤終端輸入端的字符存到變量a所在的存儲空間,而不是變量a存儲的數據所指向的內存空間~所以寫做scanf("%d",&a);//”&“是以一個操作符,可以獲取變量a所在的存儲空間位置,而不是變量a所在存儲空間中存儲的數據~


發佈了54 篇原創文章 · 獲贊 56 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章