还是在《C专家编程》里面看到的,相当于笔记吧:
1、struct fruit
{
float weight;
}fruit;
a:struct fruit apple;
b:frint banana;
上面两个声明都是正确的吗?
2.、typedef struct fruit
{
float weight;
}fruit;
a:struct fruit apple;
b:fruit banana;
这样呢?
如果你不知道答案是什么,那么让我们来看下这个:
struct 结构标签 {
成员类型1 成员名称1;
成员类型2 成员名称2;
成员类型3 成员名称3;
..............
}变量1,变量2,-----;//这个是变量名
typedef struct 结构标签 {
成员类型1 成员名称1;
成员类型2 成员名称2;
成员类型3 成员名称3;
..............
}别名1,别名2,-----;//这个是别名
现在,你应该可以知道正确答案了吧:
对于的一个:a正确,b错误。
对于的第二个:a、b都正确。
但是在第一个中,我们可以这样:
struct fruit apple,banana;
其实,我们只要记住一点:typedef是起别名的,就像每个人都有的小名一样!
define与typedef:
我们在写程序的时候经常会这样写:
#define MAXSIZE 100 //把MAXSIZE做为100的宏
typedef char * str_ptr //把char型的指针用str_ptr来代替
两个可以说都是起别名,但是他们在这两个方面有区别:
1、typedef是一个整体,不能用别的来修饰。
#define peach int;
unsigned peach i;//没有问题
typedef int banana;
unsigned banana i;//这个就不行了
2、在连续几个的变量声明中,typedef能保证变量的类型一致。
#define str_ptr char *;
str_ptr str1,str2;//str1是指针类型,而str2不是
typedef char * str_ptr;
str_ptr str1,str2;//str1和str2都是指针类型
我们可以这样理解typedef,它是一种“封装”。