指針的概念解析,別再搞混了!指針數組和數組指針的區別!

1. 指針的的理解:

    指針屬於C/C++語言的範疇內的東西,與程序對內存的使用密不可分,先來介紹容易弄混的符號(token),例如有(例子1):  int *p;    那麼*p代表什麼、&p代表什麼、p又是什麼?

    1.1 理解的基礎:
          我們常說變量變量,那變量到底是什麼呢?在編程中,一個變量會涉及到幾個東西token、變量所使用的內存地址、變量的           值。比如我們聲明定義int a=100時,此時系統會在內存裏開闢一塊內存空間,這裏假設爲0x0009,然後把值100用二進制的形式        存放到該地址空間中,這就完成了一個定義的過程。當我們訪問變量時,a這個token表示的是100這個值,&a這個token表示的是0x0009這個地址,實際上它也是一個值。
    1.2 回到開始的指針問題
        指針無非也是變量,所以該開始的問題也就好理解了,int *p定義了一個指針 **變量**(其實我們可以這麼定義int* p),而符號p表示的是變量的值,&p表示變量的地址,*p(注意*p與int *p的區別)指針變量所指向的內存單元的值。
        具體實例
        void test_pointer(int *p){
            p=(int *)malloc(sizeof(int));
            *p=100;
        }
        int main(){
            int *ptr;
            test_pointer(ptr);         //傳值來傳參
            printf("%d\n",*ptr);     //輸出100
            printf("%d\n",ptr);          //輸出實參ptr的值,也即該指針所指向的地址(malloc分配)
            printf("%d\n",&ptr);     //該實參ptr自身的內存地址
        }    
================================================================================================
2. 指針數組與數組指針:
    指針數組:指向某一個數組的指針,如表達式int (*p)[5],“()”的優先級比“[]”優先級高,所以表達式表示有一個整型數組裏有5個元素,有一個指針p指向該數組;
    數組指針:由多個指針組成的數組,即數組裏的元素類型爲指針類型,例如表達式int *p[5],“[]”優先級高,表示有一個數組存放5個元素,每個元素爲一個整型指針(指向整數的指針)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章