親,C語言中指標的定義和引用以及賦值時候“*”都表示什麼含義啊

  • 作者:由 匿名使用者 發表于 體育
  • 2023-01-16

親,C語言中指標的定義和引用以及賦值時候“*”都表示什麼含義啊匿名使用者2017.08.20 回答

在C語言中,定義一個普通的變數(如整型數),我們這樣做:int i; 而定義一個指標變數(指標)我們需要這樣做:int *p ; 還記得嗎,一個矩形中的值是有型別的,可能是整型,可能是字元型……,它們原本是“清白”的,無型別的,是我們透過一些手段使它們有了型別。當我們做出int i; 這樣一個定義時,編譯器就會分配一個地址(例如200)並和i 關聯起來,而int將限定編譯器把這個區域中的內容作為整型數看待。

矩形內的值被視為int型

現在我們又有了int *p;這個定義,假設p是指向變數i的(見下圖),p中存的是變數i的地址。* 表示p是一個指標,而int表示p中所存的地址對應的變數(即變數i)的型別是int。

p指向i , int *p;中的int是指標p所指向的變數的型別

我們將int稱為指標p的基型別,或指標p所指向的變數的型別。

類似地,我們可以有: char *s ; ( s是指向char型變數的指標 )

float *f ; ( f是指向float型變數的指標 )

double *d ; ( d是指向double型變數的指標 )

由此得到宣告一個指標變數(指標)的一般形式 : 基型別 * 指標名;

有一點要注意,在定義指標時,以下兩種方式都是允許的,例如:

int *ptr1;

int* ptr2;

但一般比較傾向用第一種,因為可以避免以下的誤解:

int* prt1, ptr2;

這樣的定義方式,容易使人誤以為ptr2也是一個指標,事實上並不是,prt2是一個int型變數,以下的定義方式中ptr1與ptr2才都是指標:

int* ptr1, *ptr2;

2。指標的運算

<1>.&(address-of operator)取地址運算子:

究竟如何使一個指標指向一個變數呢?後面的語句給出瞭解答:int *p = &i;& 用於取一個物件的地址(本文說的物件是泛指的某一事物,如變數,陣列等,和C++中的物件概念不同),這裡用於將i的地址賦給p, 那麼指標p就指向了變數i 。上述的語句也可以分開寫,如:int *p; p = &i;

小擴充套件:(下面大括號中的內容,出涉指標的朋友可以跳過,當然也可以作為擴充套件知識)

{&的實質:當對一個T型別物件進行 & 操作時,返回的是一個“指向T的指標”型別的常量,即指標常量(pointer constant),在我們使用&運算子時我們並不關心它是如何實現的,因為有編譯器幫我們隱藏了這些細節。

可當我們想要對一個指標賦一個絕對地址的時候,這個問題就體現出來了,而且我們不得不去關注,在C語言中沒有一種內建(built-in)的方法去表示指標常量,所以當我們使用它的時候通常先寫成整型常量的形式,然後再透過強制型別轉換把它轉換成相應的型別,如:int * , double * , char *等。 所以後面所示的做法是不行的: int *p = 0x12345678 ; 正確的方式應為:int *p = (int *) 0x12345678; 也許大家還記得我在第一講中說的要注意指標中只能存放地址,不能將一個非0值整型常量表達式或者其他非地址型別的資料賦給一個指標,原因就在此。在大多數計算機中,記憶體地址確實是以無符號整型數來表示的,而且多以16進製表示,但我們在C語言中不能用整型數去表示地址,只能用指標常量來表示,因為它是被用來賦給一個指標的。

對於這個賦值問題還可以換一個角度去理解,在C語言中,使用賦值運算子時,賦值運算子左邊和右邊的表示式型別應該是相同的,如果不是,賦值運算子將試圖把右邊表示式的值轉換為左邊的型別。所以如果寫出int *p = 0x12345678 ; 這條語句編譯器會報錯:‘=’ : cannot convert from ‘ const int ’ to ‘ int* ’ ,因為賦值運算子左邊和右邊的表示式的型別應該相同,而0x12345678是int型常量,p是一個指向int型的指標,兩者型別不同,所以正確的方式是:int *p = (int *) 0x12345678 ; }

<2>.* (Dereference operator) 解引用運算子

* 在定義時用來說明一個變數是指標,而在定義了一個指標之後,我們使用(引用)指標時,*p表示的是p所指向的物件(即i)。也就是說,對於一個已定義的指標使用 * 運算子,將訪問這個指標所指向的物件,我們來看下面的程式:

#include

int main()

{

int i; /*定義一個int型變數i*/

int *p;

親,C語言中指標的定義和引用以及賦值時候“*”都表示什麼含義啊小臉貓2022.03.03 回答

指標定義時,如int * p,表示定義了一個指向int型別的指標變數;

引用時,*p表示取p指向儲存單元的內容;

賦值時,如t = *p,表示將p指向的儲存單元中的內容賦給t。

親,C語言中指標的定義和引用以及賦值時候“*”都表示什麼含義啊夢的延續2015.03.21 回答

d

Top