**引言:数据经常以成组的形式存在。在C中,使用结构可以把不同类型的值存放在一起。**
**结构的声明有两种**
1、struct SIMPLE{
int a;
char b;
float c;
};然后用标签SIMPLE去声明结构体变量。
2、typedef struct{
int a;
char b;
float c;
}Simple;然后用Simple去声明结构体变量。此时Simple是个类型名,而不像上面的SIMPLE是个标签。
结构成员可以是标量、数组、指针甚至是其他结构。
结构成员的直接访问用点操作符(.)访问。例如Simple a;a.a或a.b或a.c。
结构成员的间接访问用->操作符访问,它是针对结构指针使用的。例如Simple *a;a->a或a->b或a->c。
结构的自引用是结构的成员里包含结构本身,但这种包含不能是直接包含,而应该包含的是指向该结构的指针。
结构作为函数参数时,一般使用指向结构的指针。向函数传递指针的缺陷在于函数现在可以对调用程序的结构变量进行修改。如果不希望如此,可以在函数使用const关键字来防止这类修改。而且,传递结构指针比传递结构本身更有效率。
**总结:**
1、具有相同成员列表的结构声明产生不同类型的变量。
2、使用typedef为一个子引用的结构定义名字时应该小心。
3、向函数传递结构参数是低效的。
4、把结构标签声明和结构的typedef声明放在头文件中,当源文件需要这些声明时可以通过#include指令包含。
5、结构成员的最佳排列形式并不一定就是考虑边界对齐而浪费内存空间最少的那种排列形式。
- 前言
- (四)回调函数
- (一)while(1)死循环与for(;;)死循环的区别
- (二)static关键字
- (三)函数
- (四)可变参数函数
- (五)setjmp和longjmp
- (六)指针
- (七)回调函数
- (八)字符串
- (九)动态内存分配
- (十)结构体
- (十一)深入理解指针
- (十二)命令行参数
- (十三)printf、fprintf、sprintf和snprintf函数
- (十四)const关键字详解
- (十五)字符串输入函数fgets、gets和scanf
- (十六)字符串输出函数puts、fputs和printf
- (十七)字符/字符串输出函数fputc、fputs、putc、putchar和puts
- (十八)字符/字符串输入函数fgetc、fgets、getc、getchar和gets
- (十九)restrict关键词
- (二十)scanf函数详解
- (二一)内联函数
- (二二)位操作
- (二三)errno变量
- (二四)内存分配