先看下面几个例子:
int i; // i为一个变量,类型为int
int* pi; //pi为一枚指针,所指的类型为int
int ai[N]; //ai为一个数组,数组元素类型为int
int* pai[N]; //pai为一个数组,数组元素类型为int*;
int (*ppai)[N]; //ppai为一枚指针,所指的类型为int[N];
int f(int); //f为一个函数,类型为int (int);
int (*pf)(int); //pf为一枚指针,所指的类型为int (int);
接下来我们来看一下类型转换:
(int)var; //把var强制转换为int型
(int*)var; // 把var强制转换为int* 型
(int(*)[N])var; //把var强制转换为int(*)[N];
(int(*)(int))var; //把var强制转换为int(*)(int)型;
从上面的两个例子,可以看出:
1. 指针的定义只需在变量定义的变量名前面冠以*号
2. 数组和函数的指针定义要加小括号,因为*的运算优先级比[]和()低
3. 变量定义语句中,去除变量名,即得到类型(无命名类型)
4. 类型用()括住,后跟变量名,即强制类型转换
typedef语句的使用:
int ai[N]; //ai为一个int[N]数组
typedef int tai[N]; //tai为一个类型(命名类型)
tai ai1,ai2; //ai1,ai2和ai为同一种类型的变量
void (*pf) (int); //pf为一枚指针,所指类型为 void (int);
typedef void (*tpf) (int); //tpf为一个类型(命名类型)
tpf pf1,pf2; //pf1,pf2和pf为同一种类型的变量
上例可以看出:
1. 在变量定义语句前面加上typedef,得到一个命名的类型
2. 可以用typedef定义的命名类型定义变量
3. 命名类型定义的变量与无typedef定义的变量类型相同
4. typedef可以简化操作
下面举一些typedef简化操作的例子:
typedef int (*tf) (int,int);
tf (*fun_f)(int,tf);
//如果不用typedef,上面的语句为:
// int (*(*fun_f)(int,int (*)(int,int)))(int,int);

被折叠的 条评论
为什么被折叠?



