c語言指針

        在計算機科學中,指針(Pointer)是編程語言中的一個對象,利用地址,它的值直接指向(points to)存在電腦存儲器中另一個地方的值。由於通過地址能找到所需的變量單元,可以說,地址指向該變量單元。因此,將地址形象化的稱爲“指針”。意思是通過它能找到以它爲地址的內存單元。[1]  在高級語言中,指針有效地取代了在低級語言,如彙編語言與機器碼,直接使用通用暫存器的地方,但它可能只適用於合法地址之中。指針參考了存儲器中某個地址,通過被稱爲反參考指針的動作,可以取出在那個地址中存儲的值。作個比喻,假設將電腦存儲器當成一本書,一張內容記錄了某個頁碼加上行號的便利貼,可以被當成是一個指向特定頁面的指針;根據便利粘貼面的頁碼與行號,翻到那個頁面,把那個頁面的那一行文字讀出來,就相當於是對這個指針進行反參考的動作。

指針是一個特殊的變量,它裏面存儲的數值被解釋成爲內存裏的一個地址。 要搞清一個指針需要搞清指針的四方面的內容:指針的類型、指針所指向的 類型、指針的值或者叫指針所指向的內存區、指針本身所佔據的內存區。

指針的類型:(1)int*ptr;//指針的類型是int*    (2)char*ptr;//指針的類型是char*    (3)int**ptr;//指針的類型是int**     (4)int(*ptr)[3];//指針的類型是int(*)[3]    (5)int*(*ptr)[4];//指針的類型是int*(*)[4]。

指針所指向的類型:(1)int*ptr;   //指針所指向的類型是int    (2)char*ptr;   //指針所指向的的類型是char    (3)int**ptr;     //指針所指向的的類型是int*     (4)int(*ptr)[3];  //指針所指向的的類型是int()[3]    (5)int*(*ptr)[4];  //指針所指向的的類型是int*()[4]。

指針的值--或者叫指針所指向的內存區或地址:  指針的值是指針本身存儲的數值,這個值將被編譯器當作一個地址,而不是一個一般的數值。在32位程序裏,所有類型的指針的值都是一個32位整數,因爲32位程序裏內存地址全都是32位長。 指針所指向的內存區就是從指針的值所代表的那個內存地址開始,長度爲sizeof(指針所指向的類型)的一片內存區。以後,我們說一個指針的值是XX,就相當於說該指針指向了以XX爲首地址的一片內存區域;我們說一個指針指向了某塊內存區域,就相當於說該指針的值是這塊內存區域的首地址。  指針所指向的內存區和指針所指向的類型是兩個完全不同的概念。在例一中,指針所指向的類型已經有了,但由於指針還未初始化,所以它所指向的內存區是不存在的,或者說是無意義的。


發佈了15 篇原創文章 · 獲贊 10 · 訪問量 5863
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章