C語言 指針相關

    C語言是一門面向過程的編程語言,而指針這個東西 對於C語言來說又是精髓所在。在進行C語言的程序編寫時,指針的合理運用會帶來很好的運行效率。

    首先,說明兩個符號。第一個“%p”,這個符號指輸出指針地址,可以查看指針所指的地址;第二個“&”,我們在scanf語句常會用到這個符號,但是它又是什麼含義呢。這裏說明一下它的意義是指:取地址。所以scanf時,我們是把值賦到了該變量相應地址的內存空間內。

    關於應用場景:

            1、數據結構相關,連接內存空間,申請內存空間等等。

                 申請內存,我們會用到 malloc。但是希望各位能夠在malloc申請空間後在適當的時機進行free釋放掉空間。free時的地址應該是申請時的地址。如果地址改變,編譯會報錯。

    

            2、當指針和數組聯繫在一起時,我們不妨試一試。

從下圖可以發現,指針的地址和數組首地址是一樣的。



    當我們需要保證數組值不發生改變時,我們就可以用指針作爲形參,數組作爲實參,對指針進行操作從而達到對數組進行操作。下圖,在主函數內定義了數組arr,作爲GetValue子函數參數傳入,在子函數內通過指針實現了對數組的賦值。



    另外,由下圖可見,數組a和b明明是兩個相同的,爲什麼a==b的值會是0?因爲在做編譯時,與指針相似,比較的是地址。由於兩個數組地址不一樣,所以自然返回值爲0

    


    最後,分享一些相關的。

        1)在聲明一個指針後,如果未確定其地址,禁止賦值。因爲它的地址是未知的,如果指向的地址禁止讀寫,那麼程序會崩掉。

        2)指針在做減法時,其本質是: 地址相減 / sizeof(指針類型)

        3)不同類型的指針不建議進行相互的賦值。雖然程序能夠編譯,但是在內存空間上會造成混亂。因爲每個數據類型的sizeof是不相同的。

        4)注意 0地址 的使用。通常,這個地址是用戶不可觸碰的,在規定時可以用NULL代替。

        5)malloc返回的類型是void*,所以我們需要在malloc前面加上(變量類型*),強制轉換一下。


如有錯誤,還望指正,在此謝過。

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