1.首先介绍一下C语言的用法,在C中定义一个结构体类型要用typedef:
//定义一个结构体类型 //定义一个数据类型,固定大小内存块的别名,还没有分配内存 struct Teacher { int age; }; void main() { struct Teacher Zhang; //告诉C编译器给我分配内存 }
注意:上面使用struct Teacher Zhang; 定义类型变量的时候不能省略struct (C++可以),可以采用下面重定义的方式省略struct
//定义一个结构体类型 //定义一个数据类型,固定大小内存块的别名,还没有分配内存 //重定义 typedef struct Teacher { int age; }Tea; //这里面相当于为struct Teacher去了一个新的名字Tea void main() { Tea Zhang; //如果没有typedef就必须用struct Teacher Zhang来声明) }
可以看出在C中,若不使用typedef需要struct Teacher Zhang; 来声明变量。上面的Tea是struct Teacher的别名,Tea==struct Teacher。在声明变量的时候就可:Tea Zhang。
2.而在C++用法中比较简单,可以直接
struct Teacher { int age; };
于是就定义了结构体类型Teacher,声明变量时直接Teacher Zhang;
如果在c++中用typedef的话,又会造成区别
无typedef:
struct Teacher { int age; }Tea1; //Tea1是一个变量 void main() { Tea1.age = 30; //为结构成员赋值 }
有typedef:
typedef struct Teacher { int age; }Tea2; //Tea2是一个结构体类型 = struct Teacher void main() { Tea2 Zhang //先声明结构类型变量 Zhang.age = 40; //访问结构成员并赋值 }
无typedef时,使用过程中可以直接访问结构成员并赋值Tea1.age = 30;
而有typedef时,则必须先声明一个结构类型变量变量Tea2 Zhang,然后给结构成员赋值Zhang.age = 40;
总结:C++中无typedef时,在末尾定义的是变量,可以直接使用它对结构中的成员变量进行赋值;而有typedef 时,在末尾定义的是结构类型,相当于为struct定义的结构类型换了一个新的名字,使用时,需要先定义变量,然后对结构中的成员变量进行赋值。
参考:https://blog.csdn.net/we1meng/article/details/70208708
戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。 |