關於C語言的指標 鍊錶的原理和各類操作

2021-07-11 21:29:16 字數 1445 閱讀 4009

一、指標

1、指標

指標是乙個儲存計算機記憶體位址的變數。從指標指向的記憶體讀取資料稱作指標的取值。指標可以指向某些具體型別的變數位址,例如int、long和double。指標也可以是void型別、null指標和未初始化指標。

我們在使用c語言進行編寫程式的時候,就一定會使用上指標,指標的操作是編寫程式的乙個點。如何更好的使用指標,將是我們進行更好的書寫程式的關鍵。我認為弄清楚下面幾個要點,可以更好的理解指標:

(1):指標是乙個位址,指向的是個型別

(2):指標指向的是位址,位址指向的是內容

(3):指標的指標,是面對於指標的變數

2、陣列 c

語言的陣列表示一段連續的記憶體空間,用來儲存多個特定型別的物件。

陣列和指標不是同一種結構因此不可以互相轉換。而陣列變數指向了陣列的第乙個元素的記憶體位址。

3、指標與結構體

就像陣列一樣,指向結構體的指標儲存了結構體第乙個元素的記憶體位址。與陣列指標一樣,結構體的指標必須宣告和結構體型別保持一致,或者宣告為

void

型別。

二、鍊錶

鍊錶我的理解要包含以下特徵:(1).由n個節點離散分配;(2).每個節點通過指標連線(3)每乙個節點由乙個前驅節點和乙個後驅節點(4).首節點沒有前驅節點,尾節點沒有後驅節點;

滿足上面的4條,我們就稱為鍊錶;鍊錶既然由很多個節點,那節點又由什麼組成?節點由兩個部分組成,一是資料域,用來存放有效資料;二是指標域,用來指向下乙個節點;下面用c語言來構建鍊錶資料結構,首先應該構造出節點,然後再把所有的節點連起來,就構成了鍊錶;

例如:#include

int main()

{int*ptr;   // 宣告乙個int指標

int val =1;  // 宣告乙個int值

ptr =&val;  // 為指標分配乙個int值的引用

int deref =*ptr;  // 對指標進行取值,列印儲存在指標位址中的內容

printf("deref位址=%ld,值=%d\n",ptr, deref);

第2行,我們通過*操作符宣告了乙個int指標。接著我們宣告了乙個int變數並賦值為1。然後我們用int變數的位址初始化我們的int指標。接下來對int指標取值,用變數的記憶體位址初始化int指標。最終,我們列印輸出變數值,內容為1。

第6行的&val是乙個引用。在val變數宣告並初始化記憶體之後,通過在變數名之前使用位址操作符&我們可以直接引用變數的記憶體位址。

第8行,我們再一次使用*操作符來對該指標取值,可直接獲得指標指向的記憶體位址中的資料。由於指標宣告的型別是int,所以取到的值是指標指向的記憶體位址儲存的int值。

這裡可以把指標、引用和值的關係模擬為信封、郵箱位址和房子。乙個指標就好像是乙個信封,我們可以在上面填寫郵寄位址。乙個引用(位址)就像是乙個郵件位址,它是實際的位址。取值就像是位址對應的房子。我們可以把信封上的位址擦掉,寫上另外乙個我們想要的位址,但這個行為對房子沒有任何影響。

C語言的指標 鍊錶的原理和各類操作

一 指標 1 運用指標 什麼是指標?什麼是記憶體位址?什麼叫做指標的取值?指標是乙個儲存計算機記憶體位址的變數。從指標指向的記憶體讀取資料稱作指標的取值。指標可以指向某些具體型別的變數位址,例如int long和double。指標也可以是void型別 null指標和未初始化指標。根據出現的位置不同,...

C語言的指標 鍊錶的原理和各類操作

一 指標 1 運用指標 什麼是指標?什麼是記憶體位址?什麼叫做指標的取值?指標是乙個儲存計算機記憶體位址的變數。從指標指向的記憶體讀取資料稱作指標的取值。指標可以指向某些具體型別的變數位址,例如int long和double。指標也可以是void型別 null指標和未初始化指標。根據出現的位置不同,...

C語言的指標 鍊錶的原理和各類操作

一 指標 1 運用指標 什麼是指標?什麼是記憶體位址?什麼叫做指標的取值?指標是乙個儲存計算機記憶體位址的變數。從指標指向的記憶體讀取資料稱作指標的取值。指標可以指向某些具體型別的變數位址,例如int long和double。指標也可以是void型別 null指標和未初始化指標。根據出現的位置不同,...