1. 形式如(*)p 的p表示指向什麼的指針變量,例如:
int * p: p爲指向執行數據的指針變量
int (*P)[n]: p爲指向包含n個元素的一維數組的指針變量,即數組指針
int (*p)(): p爲指向函數的指針變量,該函數返回一個整形
int **p: p爲指向一個整形數據的指針變量
2. 另外:
int *p[n]: p爲一個數組,一個指針數組,它由n個指向整型數據的指針元素。【主要使用在傳遞多個指針變量】
int *p(): p爲一個函數,該函數返回一個指針,該指針指向整形數據
3. ‘\0’ 的ASCII代碼爲 0。
4. C語言中可以使用字符數組存放一個字符串或使用字符指針指向一個字符串,從而訪問一個字符串。
5. 數組可以在定義時整體賦值,但是不能在賦值語句中整體賦值,而字符指針可以將一個字符串的首地址傳給指針從而指向另一個字符串,這一點,通過數組名也不能實現,因爲數組名雖然是地址,但它是常量,它的值不能改變的。
6. 通過字符數組名或字符指針變量可以輸出一個字符串,而對一個數值型數組則不能用數組名輸出它的全部元素。
《C語言程序設計》
指針常量:本質是一個常量,這個常量的類型是指針。也就是說這個指針是一個常量,所以這個指針本身的值不能改變,但是其指向的地址的值可以改變。
常量指針:本質是一個指針,指向的是常量。即這個指針指向的地址的值不能修改,但是指針本身可以改變,可以指向不同的地址。
一個經典的筆試題
用變量a給出下面的定義:
a) 一個整型數
b)一個指向整型數的指針
c)一個指向指針的的指針,它指向的指針是指向一個整型數
d)一個有10個整型數的數組
e) 一個有10個指針的數組,該指針是指向一個整型數的
f) 一個指向有10個整型數數組的指針
g) 一個指向函數的指針,該函數有一個整型參數並返回一個整型數
h) 一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數並返回一個整型數
答案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to aninteger
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointersto integers
f) int (*a)[10]; // A pointer to an arrayof 10 integers
g) int (*a)(int); // A pointer to afunction a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10pointers to functions that take an integer argument and return an integer