C99中 结构体初始化的用法
- static struct id_mesg{
- charchar *name;
- unsigned int age;
- charchar *job;
- };
- static struct id_mesg persons[] = {
- {"bimax", 23, "hero"},
- {"deadpool", 34, "marvel"},
- {"thor", 65535, "god"},
- {.name = "linus", .job = "linuxman"}
- };
该段的前三个为结构体赋值常用方法,最后一个是来自C99标准,表示指定初始化,使用前缀.加变量名称进行定向赋值
如上所示,分别对name赋值为字符串“linus”,job赋值为字符串“linuxman”,可以空下age不进行赋值这使得结构体的赋值更加便捷,而且可以单独对某一个变量进行赋值而不需要管其他的变量。
倘若我们使用前三项的方法只对age和job进行赋值是比较困难的,但是使用最后一个初始化形式对这两者赋值则是非常简单,这个特性常常用在结构体变量非常多而且不需要全部进行初始化的地方,在linux的内核当中可以看到有大量的这种方法赋值的语句。
typedef的使用
int* (a)(int, char*);
typedef int* (PF)(int, char*);//PF是一个类型别名【注】PF a;//跟int* (a)(int, char*);的效果一样!
注:很多初学者只知道typedef char* pchar;但是对于typedef的其它用法不太了解。Stephen Blaha对typedef用法做过一个总结:“建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头”。