C語言進階:第26課、指針的本質分析

程序中的變量只是一段存儲空間的別名,那麼是不是必須通過這個別名才能訪問這段存儲空間?

*號的意義:

在指針聲明時,*號表示所表明的變量爲指針;
在指針使用時,*號表示取指針所指向的內存空間中的值。
*號類似於一把鑰匙,通過這把鑰匙可以打開內存,讀取內存中的值。
	int i=0; int j=0;
	int* p=&i; 			//指針聲明
	j=*p;				//取值
劃重點:變量p保存着變量i的內存地址,即   p <---> &i,    *p <---> i

            32位系統中,指針爲4個字節大小。

傳值調用與傳址調用:
    指針是變量,因此可以聲明指針參數;
    當一個函數體內部需要改變實參的值,則需要使用指針參數;
    函數調用時實參值將複製到形參;

    指針適用於複雜數據類型作爲參數的函數中。

對於const和指針的交叉考察,只需關注const修飾的是什麼就行:
修飾的是指針,那麼指針是不能改變的(p3);
修飾的是數據,那麼指針指向的數據是不能改變的(p1、p2)。

int main()
{   
    int i=0;
    
    const int* p1 = &i;
    int const* p2 = &i;    //注意此處const依然修飾的是int* p2,即這個數據是不能被改變的。
    int* const p3 = &i;
    const int* const p4 = &i;
    
    *p1 = 1;    //error
    p1 = NULL;  //ok
    
    *p2 = 2;    //error
    p2 = NULL;  //ok
    
    *p3 = 3;    //ok
    p3 = NULL;  //error
    
    *p4 = 4;    //error        
    p4 = NULL;  //error
    	
	return 0;
}

小結:

        指針是C語言中一種特別的變量;

指針所保存的值是內存的地址;

可以通過指針修改內存中的任意地址內容。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章