文档介绍:1.++和--
自增运算符和自减运算符:前缀和后缀两种情况
1)表达式++n先将n的值递增1,然后再使用变量n的值:如果n的值为5,x = n++; 执行后的结果,x的值置为5, n=6
2)表达式n++先使用变量n的值,然后再将n的值递增1:如果n的值为5,x = ++n; 执行后的结果,x的值置为6, n=6
在不需要使用任何具体值且仅需要递增变量的情况下,前缀方式和后缀方式效果相同。
、exit区别
调用一个函数,此函数的入口地址会被保存起来,放在某个确定的寄存器中,函数结束前的return语句会找到函数地址,
然后在被调用函数结束后,执行其下一条语句。
exit使进程直接终止
(重点)
1)聚合数据类型:能够同时存储超过一个的单独数据。C语言提供两种类型的聚合数据类型,数组和结构体。
结构体也是一些值的集合,这些值称为它的成员,一个结构体的各个成员可以有不同的类型。每个结构体有
自己的名字,它们通过名字访问结构体成员。
2)结构体声明与定义:
声明的一般形式:
student{int num;char sex[5];char addr[10];}; struct student s1,s2;
struct 结构体名{ 成员列表}变量名表列;
: struct {成员表列}变量名表列;(即不出现结构体名)
注意:声明结构时,可以使用另一种良好的技巧,即用typedef 创建一种新的数据类型,如:
typedef struct{int num;char name[10];char sex;}Person;
此时Person是个类型名而不是一个结构标签,所以后续的声明可以是:Person x; Person y[20],*z;
3)结构体成员的访问
PLEX{ float f;int a[20];long *lp;struct SIMPLE s;
struct SIMPLE sa[10];struct SIMPLE *sp; };
a)结构成员的直接访问: 通过点操作符(.),例如:p;p这个结构体变量
中int a[20]这个成员,; 点操作符的结合性是自左向右,如(()[4]).f,[4].f;
b)结构体成员的间接访问: 如果我们拥有一个指向结构体的指针,如 void func(PLEX *cp); 我们要访问这个
结构体的成员f,那么(*cp).f;=====>>.操作符的优先级高于*,所以我们必须要加(),这个操作有点麻烦,所以C语言定义了一个
更为方便的操作符:->(箭头操作符),cp->f就可以达到同样效果。
注意:->的左操作数必须是一个指向结构体的指针。
c)结构体的自引用
例1:struct SELF1{ 这个结构体的自引用是非法的,因为成员b是另一个
int a; 完整的结构,其内部还包含它自己的成员b,然后它的第二
struct SELF1 b; 个成员又是一个完整的结构b,这样一直重复下去。
};
例2:struct SELF1{ 这个是合法的,区别在于:b现在是一个指针而不是
in