C語言中的 和 符號

2021-09-19 23:16:17 字數 1016 閱讀 1061

之前對*和&符號一直理解的比較淺顯。只知道: 

*p好像表示的是乙個指標; 

&p表示的是乙個位址。 

然而這次當遇到了下面這個情況的時候: 

int a = 10; 

int *b = &a;

printf(「%d\n」, a); 

printf(「%d\n」, &a); 

printf(「%d\n」, b); 

printf(「%d\n」, *b);

結果: 

10 6487620 

6487620 

10一臉懵逼,為什麼&a和*b的值不是一樣?這才發現自己其實一點都沒有搞懂。

經過學習後,總結出來: 

變數a 本質上代表乙個儲存單元。cpu通過該儲存單元的位址訪問該儲存單元中的資料。所以a本來代表兩個值:儲存單元的位址和儲單元中的資料。於是就有了二異性。為了消除這種二義性,c語言規定a表示儲存單元中的資料,&a表示儲存單元的位址。 

a儲存單元中的資料可以是乙個普通數值,也可以是另乙個儲存單元的位址,比如:a = &b; 語句就是將b的儲存單元的位址存入a儲存單元中。c語言規定*a代表a中儲存的位址對應的儲存單元中的資料,也就是訪問*a就等於訪問b,於是*a提供了通過a訪問b中的資料的手段。

a表示a對應的儲存單元中的資料。 

&a表示a對應的儲存單元的位址。 

*a表示:首先,要求a對應的儲存單元中的資料一定是另乙個儲存單元的位址。 

於是,*a表示另乙個儲存單元中的資料。 

當a宣告的型別是int時,a中儲存的是乙個整數數值,通過a可以訪問(讀取或修改)這個數值。 

當a宣告的型別是int*時,a中儲存的是乙個儲存單元的位址,而該儲存單元中儲存的資料是乙個整數數值;通過*a可以訪問(讀取或修改)這個數值。a == &*a 都是該儲存單元的位址。 

當a宣告的型別是int**時,a中儲存的是乙個儲存單元的位址,而該儲存單元中儲存的資料是另外乙個儲存單元的位址,另外這個儲存單元中儲存的是乙個整數數值;通過**a可以訪問(讀取或修改)這個數值。 

C語言中的 和 符號

c語言中的 和 符號 int main void 執行結果 a 10 a 0021f7c b 0021f7cc b 10一臉懵逼,為什麼 a和 b的值不是一樣?這才發現自己其實一點都沒有搞懂。所以a本來代表兩個值 儲存單元的位址和儲單元中的資料。於是就有了二異性。為了消除這種二義性,c語言規定a表示...

C語言中的 和 符號

之前對 和 符號一直理解的比較淺顯。只知道 p好像表示的是乙個指標 p表示的是乙個位址。然而這次當遇到了下面這個情況的時候 int a 10 int b a printf d n a printf d n a printf d n b printf d n b 結果 10 6487620 64876...

C語言中的強符號和弱符號

c語言中的強符號和弱符號 c語言真的很奇怪,各種你想不到的問題都會出現,但是仔細分析這個問題,無不很有道理,這些都不是c語言的漏洞,而是這門語言的強大之處。首先介紹一下強符號和弱符號。當多個c檔案需要一起編譯執行的時候,就會有強弱符號的問題。為什麼會有多個c檔案一起編譯呢?這就的說起鏈結linkin...