1.struct声明
声明struct时可以在右花括号跟一个变量表,
struct {...} x,y,z;
如果结构声明不带变量表,则不需要给他分配空间
2.结构数组的定义
struct key
{
char *word;
int count;
}keytab[]= {
"auto",0,
"break",0,
"case",0
}
3.运算符优先级
struct point
{
int x;
int y;
char *str;
}`
struct point *pp;
等价表达:
(*pp).x ~ pp ->x
*pp.x ~ *(pp.x)
++pp->x ~ ++(pp->x)
*p->str 读取的是指针str所指对象的值
*p->str++ 先读取str所指对象的值,再将str加1(与 *str++相同)
(*p->str)++ 给str所指对象的值加1
*p++ ->str 先读取指针str指向对象的值,再给p加1
原因:
运算符优先级
①.-> 结合方向:从左到右
②++ * 结合方向: ++为前缀时,从右到左;++为后缀时,从左向右
4.typedef
typedef int Length;
将Length定义为与int具有同等意义的类型名字。
类型Length可用于类型声明、类型转换等,它的用法和类型int完全相同。但typedef并没有创造一个新的类型,只是给某个一个已存在的类型增加一个新的名称而已。
Length len,maxlen;
Length *lengths[];
typedef类似#define,但由于typedef是由编译器解释的,因此他的文本替换功能要超过预处理器的能力,例如:
typedef int (*PFI)(char *,char *);
该语句定义了类型PFI是“一个指向函数的指针,并且该函数具有两个char *类型的参数,返回值类型为int”。
除了表达方式更简洁外,typedef还可以使程序参数化,以提高程序的可以移植性。如果typedef定义的数据类型和机器有关,那么,当程序移植到其他程序时。只需改变typedef类型定义就可以了。