1. 程式人生 > >C語言 指標相關

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前面加上(變數型別*),強制轉換一下。

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