關於C語言的指針(2):
指針輸出
函數printf可以用格式說明“%p”指定指着輸出,與格式說明“%p”對應的可以是指爲地址的表達式,如在:
int k,*pk=&k,a[10];
printf("%p,%p,%p\n",pk,"abc",a);
中,pk是指針變量,,其數值爲地址,字符串“abc”的數值是存儲該字符串的一組地址連續的存儲單元中其實存儲單元的地址,數組名a的數值是分配給改庶族的一組地址連續的存儲單元中其實存儲單元的地址,其中%p的要求是16禁止輸出格式。
其他
地址是特殊的無符號數
地址是32位數的二進制數表示的無符號數,因此,對指針變量可以進行一些運算,但是對指針變量的運算有一些限制,且運算結果與指針變量的類型相關。
指針值
指針變量的數值是存儲單元的地址,但不是任意存儲單元的地址,對於int類型的指針變量,,其數值是分配給用於存儲類型爲int的數據的地址連續的4個存儲單元中的第一個存儲單元的地址,對於存儲單元分配過程;類型int的指針變量的數值只能是0x0012ff7c、0x0012ff80、0x0012ff84、0x0012ff88,而double類型的數據的地址連續的8個存儲的那元的第一個存儲單元的地址只能是0x0012ff68、0x0012ff70。
指針的類型
- 確定了指針的數值是存儲該類型數據所需要的一組存儲單元中第一個存儲單元的地址
- 在一組地址連續的存儲單元中存儲多個相同類型的數據的前提下去欸的那個了對指針+1或者-1後的數值是存儲響鈴的下一個數據,或者上一個數據的一組存儲單元中第一個存儲單元的地址,是當前指針的數值加上或者減去用運出該類型數據所需要的存儲單元書後得到的數值
- 確定了存儲在指針指向的存儲單元中的數據的二進制數的表示方式。
初值NULL
如果沒有對指針變量賦值,對指針變量的間接引用會出現問題,需要對指針變量賦予初值NULL,表示空地址,一旦間接訪問的數值爲NULL的指針變量,就會報錯。所以在定義指針變量的時候如果不確定指針變量的數值,可以賦初值NULL:
int *p1=NULL;
關於指針和函數、指針和數組尚未完成,在下次中彙總