第35章 C語言之指針(一)(1 / 1)

C語言中其他都很容易理解,也就指針是重難點。鑒於我也隻是初學者,我就按我的理解寫一下我的理解。   本章關鍵詞:指針類型,指針變量,強製類型轉換,指針訪問的位置和跨度。   先說說指針類型,在C語言中,用int* p = NULL,可以創建一個空指針。而int*是這個指針的類型。當然,有int*,也有char*和double*,它們的區別就是訪問內存時,訪問的指針大小不一樣。   例如,int*一次可以訪問4個字節,char*一次可以訪問1個字節。但是指針類型和指針所存的數據大小無關,因為,在X86,也就是32位環境下,所有指針變量的大小都是4個字節,隻是訪問的位置不一樣。   指針變量類似於整型變量,int a = 0中,a就是整型變量,而int* pa = 0x11223344中,pa就是指針變量。   再說說強製類型轉換,將一個int*類型的指針賦值給一個char*類型的指針,往往會報錯,這時候就需要強製類型轉換。   例如:int* pi =(char*)&pa   最後再說說指針訪問的位置。   準確來說,是指針訪問的區間,比如,對於一個int*類型的指針,它可以訪問的跨度是四個字節,char*類型的指針可訪問的跨度是一個字節。   舉個例子,如果對int*類型的指針變量進行修改,讓指針變量變為0,像下麵這個例子   int a = 0x11223344;   int* pa =&a;   *pa = 0;   (*pa是對指針變量進行了解引用,原本的pa已經是指針變量,而進行了解引用之後,*pa就變成了a,相當於內存中所存放的數據)   那麼,在調出內存監控時,內存中的四個字節都變成了00。   而如果用這個方式對char*類型的指針變量進行修改,隻會把一個字符修改為00。   指針訪問的跨度可以用打印指針變量來觀察。   如果分別打印指針變量pa和指針變量pa+1,那麼,你會驚喜的發現,所打印的不一樣。而且,如果所定義的pa為int*類型的指針變量,那麼,pa+1就會比pa多4個字節的跨度,相當於直接把原來的4個字節長度給跨過去了,而如果是char*類型的指針變量,則pa+1會比pa的跨度多1個字節。