1、char *(* c[10]) (int **p);
表示只想有10个元素的函数指针数组,所指向的函数接受一个指向整型指针的指针作为形参,并返回一个指向char类型的指针
char * const*(*next)();//此处的红色*号是否可省?
表示一个函数调用语句,该函数返回一个指向char型的只读指针
2、宏#define 与typedef的区别
1)可以用其他类型说明符对宏类型名进行扩展,但对typedef所定义的类型名却不能这样做,如下:
#define peach int
unsigned peach i;//没有问题
typedef int banana;
unsigned banana i;//错误,非法
2)在连续几个变量的声明中,用typedef定义的类型能够保证声明中所有的变量均为同一种类型,而用#define定义的类型则无法保证。如下:
#define int_ptr int *;
int_ptr chalk,cheese;
经过宏扩展,第二行变为:
int * chalk,cheese;
这使得chalk和cheese成为不同的类型。
3、struct my_tag
{
...
}my_var;//注意此处为结构体类型的变量
typedef struct my_tag
{
...
}my_type;//此处为类型,因为用了typedef定义过了
示例:
typedef struct fruit//此处的fruit是结构标签,可以用struct fruit A来声明一个变量A
{
int weight,price_per_lb;
}fruit;//语句1,此处的fruit是个类型,直接fruit B来声明变量B
struct veg{//此处的veg是个标签,与之前的fruit标签类似
int weight,price_per_lb;
}veg;//此处的veg是个变量,不能用来声明变量,如veg C;非法