C語言 傳指標和解引用,野指標和空指標

2021-08-21 11:51:10 字數 1014 閱讀 9281

乙個函式的改變要影響另乙個函式需要兩個條件:

1、傳指標。

2、解引用。

通過交換a和b數值的例項來說明其重要性:

在主函式中輸入a和b的值;int a = 10;int b = 20;預期輸出結果為a = 20;b = 10。

明顯與預期結果不符。原因:沒有傳指標!

具體操作為:

也與預期結果不符。原因:沒有解引用。

與預期相符,多測試幾組有代表性的資料。既傳指標又解引用,交換了兩個資料的值。

在這個例子中,除了1、2兩種可能的問題外,還可能出現以下這種錯誤。

系統直接崩潰。原因:定義的tmp是乙個野指標。

野指標,也叫懸掛指標,即未初始化的指標,沒有訪問許可權的位址(指標)。

注意:野指標不是空指標。

空指標:null,表明當前的指標無效。注意:不能對乙個無效的指標解引用。

todo:如下程式:

int a = 10;

int *p = &a;

p = null;

printf("%d\n",*p); 

程式會崩潰,因為不能對乙個無效的指標解引用。現將其中的p = null;用功能函式fun(p)替換,fun函式為:

void fun(int *p)

int main()

c 空指標和野指標

野指標不同於空指標,空指標是指乙個指標的值為null,而野指標的值並不為null,野指標會指向一段實際的記憶體,只是它指向 我們並不知情,或者是它所指向的記憶體空間已經被釋放,所以在實際使用的過程中,我們並不能通過指標判空去識別乙個指標是否為野指標。野指標可能指向乙個可用的,但是正在被使用的空間,如...

c 空指標,野指標

當給空指標所指的位址賦值時,會報錯 int p nullptr p 10 int p 野指標,未初始化int p new int delete p 刪除後不知道p指向 include using namespace std class a void a func void void test voi...

空指標和野指標

關於多次free 出現的野指標的原因 指標變數和指標變數所指的記憶體空間變數是兩個不同的概念 free 最主要釋放的指標變數所指的記憶體空間,因為記憶體資源是有限的,很寶貴,需要 利用 但是指標變數本身的值還是之前的指向,未重置成null 所以再次釋放的時候,指向了未知的記憶體區域,產生野指標 避免...