關於C語言實現單鏈表中的指標問題

2022-09-20 06:12:09 字數 1566 閱讀 1780

指標是指向記憶體中一定大小記憶體區域的變數。定義乙個指標如:

int *p;

但這樣只是宣告了乙個指標變數p,p指向**我們不清楚,需要指定這個指標變數指向的記憶體區域

int x = 2

;int *p = null; //

初始化,避免p是野指標

p = &x; //

讓p指向x

指標變數實際上存放的是目標區域的記憶體位址。

我們要注意區分*p = 和 p =這兩種情況

*p = 2;       //

讓p指向的記憶體區域中的值變成2

p = &a; //

讓指標p指向記憶體中的區域a,也就是讓p的值為a的位址

注意:指標變數的值是位址,取內容符號與指標變數搭配,改變的不是指標的值,而是指標指向的記憶體區域的值

c語言中,引數傳遞有兩種,乙個是值傳遞,乙個是位址傳遞。值傳遞情況下,c程式只是獲得了值,也就是變數的拷貝,在c程式內對變數的任何操作都不會引起記憶體中原本的變數的變化。想要改變傳遞進來的引數,就需要進行位址傳遞。

void test(int *a)

intmain()

我們在單鏈表中,用到了指標來實現單鏈表

typedef struct

lnodelnode, *linklist;

​linklist l;

怎麼理解這個l?

我們要知道,linklist本質上是乙個指標,它指向的是記憶體中大小為的lnode型別區域。那麼,l這個指標,儲存的應該是目標區域的位址。

一開始我們只是宣告了這麼乙個指標l,還沒有將它指向一片記憶體區域。為了將它指向一片記憶體區域,我們需要使用malloc函式來分配記憶體空間

l = (lnode *)malloc(sizeof(lnode));  //

注意要用(lnode *)或者(linklist)

//來對malloc函式返回的位址進行型別轉換

if (l == null) return

false;

這個時候我們就要注意,這個對單鏈表進行初始化的函式initlist,接收的引數應該是怎麼樣的?

經過驗證,我們得知,如果直接傳入指標l,那麼我們將不能更改記憶體中l的指向區域。為了改變指標l,我們有兩種方案可以選擇:

通過return語句來返回位址

linklist initlist(linklist l)}​

intmain()

使用二級指標,來對一級指標l的值(指向的記憶體區域是哪一片)進行改變。

int initlist(linklist *l)}​

intmain()

根據單鏈表的基本操作,我們總結一下必須要用二級指標的情況,實際上也就是對單鏈表內容進行更改的情況:

c語言實現單鏈表

一 使用簡介 使用c語言實現了單鏈表的基本操作,共有四個檔案,兩個標頭檔案是常用的,後兩個分別是主函式,和對鍊錶的基本操作函式,倒入時候,須將四個檔案放在同乙個目錄下。二 心得 在書寫過程中,主要錯誤集中在指標的使用上,通過此次程式設計,對於指標的認識更加深刻,頭結點的存在,更大意義上是為了簡化指標...

C語言實現單鏈表

單鏈表可以說是基礎,有利於對指標的使用 結點 typedef int datatype typedef struct slistnode slistnode 實現的函式的宣告如下 slistnode buynode datatype x void printslist slistnode phead...

C語言實現單鏈表

dev c 編譯執行通過,實現了單鏈表的構建,清空,插入,刪除和查詢。include include include include include define ok 1 define error 0 typedef int elemtype typedef struct node node ty...