12 2 C語言指標變數的宣告

2021-09-11 08:19:51 字數 1643 閱讀 8694

在 c 語言中,變數的位址往往都是編譯系統自動分配的,對我們使用者來說,我們是不知道某個變數的具體位址的。所以我們定義乙個指標變數 p,把普通變數 a 的位址直接送給指標變數 p 就是 p = &a;這樣的寫法。

對於指標變數 p 的定義和初始化,一般有兩種方式,這兩種方式,初學者很容易混淆,因此這個地方沒別的方法,就是死記硬背,記住即可。

方法 1:定義時直接進行初始化賦值。

unsigned char a;

unsigned char *p = &a;

方法 2:定義後再進行賦值。

unsigned char a;

unsigned char *p;

p = &a;

大家仔細看會看出來這兩種寫法的區別,它們都是正確的。我們在定義的指標變數前邊加了個*,這個p 就代表了這個 p 是個指標變數,不是個普通的變數,它是專門用來存放變數位址的。此外,我們定義p 的時候,用了 unsigned char 來定義,這裡表示的是這個指標指向的變數型別是 unsigned char 型的。

指標變數似乎比較好理解,大家也能很容易就聽明白。但是為什麼很多人弄不明白指標呢?因為在 c 語言中,有一些運算和定義,他們是有區別的,很多同學就是沒弄明白它們的區別,指標就始終學不好。這裡我要重點強調兩個區別,只要把這兩個區別弄明白了,起碼指標變數這部分就不是問題了。這兩個重點現在大家死記硬背,直接記住即可,靠理解有可能混淆概念。

第乙個重要區別:指標變數 p 和普通變數 a 的區別。

我們定義乙個變數 a,同時也可以給變數 a 賦值 a = 1,也可以賦值 a = 2。

我們定義乙個指標變數 p,另外還定義了乙個普通變數 a=1,普通變數 b=2,那麼這個指標變數可以指向 a 的位址,也可以指向 b 的位址,可以寫成 p = &a,也可以寫成 p = &b,但就是不能寫成 p = 1 或者 p = 2 或者 p = a,這三種表達方式都是錯的。

因此這個地方,不要看到定義*p 的時候前邊有個 unsigned char 型,就錯誤的賦值 p=1,這個只是說明 p 指向的變數是這個 unsigned char 型別的,而 p 本身,是指標變數,不可以給它賦值普通的值或者變數,後邊我們會直接把指標變數稱之為指標,大家要注意一下這個小細節。

前邊這個區別似乎比較好理解,還有第二個重要區別,一定要記清楚。

第二個重要區別:定義指標變數p 和取值運算p 的區別。

「*」這個符號,在我們的 c 語言有三個用法,第乙個用法很簡單,乘法操作就是用這個符號,這裡就不講了。

第二個用法,是定義指標變數的時候用的,比如 unsigned char p,這個地方使用「」代表的意思是 p 是乙個指標變數,而非普通的變數。

還有第三種用法,就是取值運算,和定義指標變數是完全兩碼事,比如:

unsigned char a = 1;

unsigned char b = 2;

unsigned char *p;

p = &a;

b = *p;

這樣兩步運算完了之後,b 的值就成了 1 了。在這段**中,&a 表示取 a 這個變數的位址,把這個位址送給 p 之後,再用p 運算表示的是取指標變數 p 指向的位址的變數的值,又把這個值送給了 b,最終的結果相當於 b=a。同樣是p,放在定義的位置就是定義指標變數,放在執行**中就是取值運算。

12 2 C語言指標變數的宣告

在 c 語言中,變數的位址往往都是編譯系統自動分配的,對我們使用者來說,我們是不知道某個變數的具體位址的。所以我們定義乙個指標變數 p,把普通變數 a 的位址直接送給指標變數 p 就是 p a 這樣的寫法。對於指標變數 p 的定義和初始化,一般有兩種方式,這兩種方式,初學者很容易混淆,因此這個地方沒...

c語言變數宣告

1.右左法則 int a 整型變數 int a 整型指標變數 int a 整型指標的指標變數 int a 整型陣列 int a 整型指標陣列 int a int 函式指標陣列 2.int fp1 int 10 fp1 是乙個函式指標變數,指向乙個形參為int 返回值為陣列指標,該指標指向乙個整型指標...

C語言變數的宣告與定義

跟同事討論 時,經常冒出宣告乙個變數 定義乙個變數的話。雖然感覺沒什麼差別,但總是混淆不清,心裡難受。查下資料,總結做個筆記總是沒錯的。一 兩者的定義 用於為變數分配儲存空間,還可為變數指定初始值。程式中,變數有且僅有乙個定義。用於向程式表明變數的型別和名字,乙個變數可以有多個宣告。在c語言中,所有...