1.数组元素可以通过下标访问是因为数组的元素长度相同。
2.结构体是成员的集合。
3.每个结构体都有自己的名字,结构体通过名字访问。
4.结构变量属于标量类型。
5.结构也可以作为传递给函数的参数,它们也可以作为返回值从函数返回,相同的结构变量相互之间可以赋值。
6.点操作符的结合性是从左到右的comp.s.a
7.((comp.sa)[4]).c是comp.sa[4].c这是一个数组(comp.sa)[4],成员sa是一个结构数组,comp.sa是一个数组名,然后通过下标访问(引用操作),这个元素本身是一个结构,通过点操作符访问它的内容。
8.(*cp).f相当于cp->f
9.
struct SELF_REF1{ int a; struct SELF_REF1 b;//非法 int c; };
struct SELF_REF1{ int a; struct SELF_REF1 *b;//合法 int c; };
在结构体的自引操作中(自己结构体中包含自己结构体),不能直接包括,而是要用指针访问。//结构不能包含类型也是这个结构的成员,但它的成员可以是一个指向这个结构的指针。
在自引中要小心不能:
struct SELF_REF1{ int a; SELF_REF1 b; int c; }SELF_REF1;
类型名直到声明的末尾才定义,所以在结构声明的内部它尚未定义。
10.结构体也和函数用法类似,在一个结构体要用其他结构体之前,要么被用的结构体在之前定义,要么在前面先声明,再在下面用,在后面定义。
11.Ex x(Ex为结构体名,这个就相当于替代等效)
Ex x={10,"Hi",{5,{-1,25}},0};
12. 10.2中的各种访问需要自己看理解
13.向函数传递指针的缺陷在于函数现在可以对调用程序的结构变量进行修改。如果我们不希望如此,可以在函数中使用const关键字来防止这类修改。
14.首先,位段成员必须声明为int ,signed int或unsigned int 类型。其次,在成员名的后面是一个冒号和一个整数,这个整数指定该位段所占用的位的数目。
struct CHAR{ unsigned ch :7; unsigned font :6; unsigned size :19;//在16位整数机器的编译器视为非法,超过整型长度 }; struct CHAR ch1;
利用位段能够用较少的位数储存数据(单片机上使用广泛)。
以后最好写上signed 或 unsignde ,不然直接写int的话,由编译器决定是否有符号。
一个能够在32位整数上运行的的位段声明可能在16位的整数的机器上不能运行。
15.联合的所有成员引用的是内存中的相同位置,
16.
enum week{Mon,Tue,Wed,Thu,Fri,Sat,Sun}day;//变量days为枚举类型enum week