1、指針數組與數組指針
(1)int* q[10]; 指針數組,聲明一個指向含有10個整型指針元素的數組。
(2)int (*p)[10]; 數組指針,聲明一個指向10個整型數組的指針。
指針數組是元素為指針的數組,而數組指針是元素為指向數組的指針。
2、函數指針與指針函數
(1)int (*p)max(int a,int b); 函數指針,p為指向參數類型為int,int,返回值為int的函數,可以將該類型的函數作為首地址賦值給p。
(2)int * max(int a,int b); 指針函數,返回值為指針類型的函數被稱作指針函數。
3、用字符串常量初始化指針與數組
(1)char *p= “gooseberry”; 字符指針,初始化指針時所創建的字符串常量被定義為只讀,如果試圖通過指針修改這個字符串值,程序會出現未定義的行為。
(2) char a[] = “gooseberry”;字符數組,與指針相反,由字符串常量初始化的數組是可以修改的。比如下面的語句:
strncpy(a,"black",5);將數組的值改為blackberry。
4、常量指針與指針常量
(1)常量指針:指向常量的指針,指針所指向地址的內容是不可被修改的。
const int *pi=&a;或者int const *pi, *pi是常量,不能將*p作為左值進行操作。
(2)指針常量:不可修改地址的指針,但是可以對其指向的地址的內容進行修改。還有,指針常量在定義時必須同時賦值,指針常量也不能釋放。
定義" int *const pi=&a;",pi是常量,不能作為左值進行操作,但是允許修改間接訪問值,即*pi可以被修改。