前言
在学习结构体的过程中,练习时发现结构体的定义有时使用srtuct,而有时使用typedef struct,那么这两者在使用时到底有什么区别呢?
struct和typedef struct的区别
C语言中的struct和typedef struct
struct
对于struct定义结构体,如果没有typedef,那么声明变量时要么定义结构体的同时定义结构体变量,要么必须要用struct Books book;
来声明。
- 定义结构体的同时定义结构体变量:
struct Books{ //Books是结构体标签
char title[50];
char author[50];
int book_id;
}book; //结构体变量
- struct Books book声明变量:
struct Books{
char title[50];
char author[50];
int book_id;
};
struct Books book;
那么,以上这两种方式访问book_id的值时:
int id = book.book_id;
printf("%d",id);
typedef struct
typedef struct Books //Books是结构体标签
{
char title[50];
char author[50];
int book_id;
}book;
book book1; //声明变量
那么声明变量时,只需book book1;
即可。
这里book其实是struct Books的一个别名,就像int、float一样,是自己定义的一个变量类型,这个类型叫做结构体类型,book book1;
相当于 struct Books book1;
如果想访问结构体的book_id成员的值:
int id = book1.book_id;
printf("%d",id);
C++中的struct和typedef struct
struct
C++中使用struct定义结构体,要么定义结构体的同时定义变量,要么定义完结构体后再声明变量。
- 定义结构体的同时定义变量
struct Books{
char title[50];
char author[50];
int book_id;
}book;
- 定义完结构体后再声明变量
struct Books{
char title[50];
char author[50];
int book_id;
};
Books book;
注意,与C语言不同的是,声明变量时只需用Books book;
即可。
typedef struct
与C语言一样,用typedef struct定义
typedef struct Books
{
char title[50];
char author[50];
int book_id;
}book;
book book1; //声明变量
这里的book仍然是结构体类型,不是变量,如果要声明变量也要用book book1;
总结
由于还在学习中,理解不是很深刻,如有错误,请指正。今后如果了解到新的内容,将会持续更新~欢迎大家交流经验。