C C 下的 和 總結 md

2021-08-28 10:17:14 字數 2121 閱讀 9494

c++中的*&對於初學者來說,確實有點讓人搞懵。因為在變數的定義和呼叫時,*&都會表現出不一樣的含義。

*在定義時是宣告該變數是乙個指標,例如

int *p; //那p就是乙個int型的指標。
例1:

int a = 0; int *p = a; //那p的值就是a的位址。
上面的int a = 0; int *p = a;實際上是int a = 0; int *p = &a;這兩者是等價的!!!

原因是int *p = &a;時,c語言本身提供了可以略去&的簡寫,但是本人不是很喜歡這樣的寫法,因為這樣會誤導初學者!

所以大家還是寫全比較規範一點,寫完int *p = &a,這樣比較好。

c++就沒有這樣的簡寫機制,大家可以測試一下。

*在呼叫時是指標指向的那個變數,是取值運算子。

例2:

int a = 0; int *p = &a; printf("*p = %d\n", *p);
&在定義時是定義乙個引用,例如:int a = 0; int &b = a;那麼b就是a的引用,即b=0;如果再給a賦值a=10,則b也會變為10;如果給b賦值b=20,則a也會變為20;

&在呼叫時是乙個取位址運算子。例如:int a = 0; printf("&a = %p\n", &a);會列印出a的位址,這個位址因為變數a在各個計算機的位址的不一樣,所以列印的也不一樣。

&在呼叫時還有一種與運算,如:int a = 0; a&=0;//按位與操作,這個就不細說了

上述的四條語句,前面兩個很好理解,而後面兩個,大部分c++初學者都會比較困惑,今天我也是查閱了一些資料以後才恍然大悟。下面具體來說明一下:

int i;

int *a = &i;//這裡a是乙個指標,它指向變數i

int &b = i;//這裡b是乙個引用,它是變數i的引用,引用是什麼?它的本質是什麼?下面會具體講述

int * &c = a;//這裡c是乙個引用,它是指標a的引用

int & *d;//這裡d是乙個指標,它指向引用,但引用不是實體,所以這是錯誤的

引用就是指標,兩者沒有區別。我們可以把引用想象成乙個不需要*就可以訪問變數的指標,對比如下程式:

void function(int *a)

int main()

void function(int &a)

int main()

以上兩段程式完成的功能是一樣的。

我在寫這兩句語句時,在int*(&)間空了一格,而後面的&(*)緊跟a。原因是:分析此類語句時,最簡單的辦法就是從右往左讀,離變數名最近的符號對其型別有最直接的影響,即先看a前緊跟的是什麼,它決定了a的型別。例如,對於int & *a,此處是*,表示其首先是個指標,指標的型別是乙個int型引用。而int後的乙個空格是為了防止int *a, b;//a是指標,而b不是

它的功能和int * &a一樣,兩者生成的二進位制**一樣。這再一次說明了引用就是指標。

c++的*與&簡單總結

uboot下記憶體操作指令mw和md

md指令 uboot下輸入指令md,會提示md的用法,memory display,即記憶體顯示。u boot petalinux md md memory display usage md b,w,l address of objects b 8位 w 16位 l 32位 預設值 示例 上述0x1...

uboot下記憶體操作指令mw和md

md指令 uboot下輸入指令md,會提示md的用法,memory display,即記憶體顯示。u boot petalinux md md memory display usage md b,w,l address of objects b 8位 w 16位 l 32位 預設值 示例 上述0x1...

c C 基礎的總結

c 面向過程 c語言 物件導向 但是c 中也有 物件導向 和過程 c 佔位符 ld輸出長整形格式 u 十進位制無符號整數 f 浮點數 s 字串 c 單個字元 p 指標的值 1 define 與 define 的區別 define 是首先在指定的目錄去尋找,然後去系統盤尋找 define 是直接去系統...