声明时可使用的符号
符号 | 含义 |
---|---|
* | 表示一个指针 |
( ) | 表示一个函数 |
[ ] | 表示一个数组 |
复杂声明示例:
int board[8][8]; //声明一个内含int数组的数组
int ** ptr; //声明一个指向指针的指针,被指向的指针指向int
int * risks[10]; //声明一个内含10个元素的数组,每个元素都是指向int的指针
int (* rusks)[10]; //声明一个指向数组的指针,该数组内含10个int的指针
int * off[3][4]; //声明一个指向3×4的二维数组,每个元素都是指向int的指针
int (* uuf)[3][4]; //声明一个指向3×4二维数组的指针,该数组中内含int类型值
int (* uof[3])[4]; //声明一个内涵3个指针元素的数组,其中每个指针都指向一个内含4个int类型元素的数组
关键问题是 * 、( ) 、[ ] 的优先级问题。
( ) 、[ ] 具有相同的优先级,比 * 的优先级高。结合时,从左往右结合。
函数和指针的纠缠关系
函数原型:
void ToUpper(char *);
指针指向该函数类型:
void (*pf)(char *); //pf是一个指向函数的指针
如果第一个圆括号省略:
void *pf(char *); //pf是一个返回字符指针的函数
函数名可以用于表示函数的地址:
void ToUpper(char *);
void ToLower(char *);
int round(double);
void (*pf)(char *);
pf = ToUpper; //有效,ToUpper是该类型函数的指针
pf = ToLower; //有效,ToLower是该类型函数的指针
pf = round; //无效,round与指针类型不匹配
pf = ToLower(); //无效,ToLower()不是地址
最后一句的无效不仅仅是因为他不是地址,而且 ToLower() 的返回类型是 void ,它无返回值,不能在赋值语句中进行赋值。
指针 pf 只能指向 char * 参数,返回类型为 void 的函数!
其实这种方法使用函数在某些方面也比较简单的。
(在此就不说明指针函数的使用方法了)