1.不是非用不可时,不要使用外部变量。
外部变量的作用域是从定义点到本文件结束。如果定义点之前的函数需要引用这些外部变量时,需要在函数内对被引用的外部变量进行说明。
外部变量说明的一般形式为:
extern 数据类型 外部变量[,外部变量2……];
在程序执行期间,静态内部变量始终存在,但其它函数是不能引用它们的。
定义但不初始化,则自动赋以"0"(整型和实型)或'\0'(字符型);且每次调用它们所在的函数时,不再重新赋初值,只是保留上次调用结
束时的值!
自动局部变量(又称自动变量):定义而不初始化,则其值是不确定的。如果初始化,则赋初值操作是在调用时进行的,且每次调用都要重新赋
一次初值。
只有局部变量才能定义成寄存器变量
静态外部变量──只允许被本源文件中的函数引用
非静态外部变量──允许被其它源文件中的函数引用
定义时缺省static关键字的外部变量,即为非静态外部变量。
在函数内的extern变量说明,表示引用本源文件中的外部变量!而函数外(通常在文件开头)的extern变量说明,表示引用其它文件中的外部
变量。
2.宏定义不是C语句,所以不能在行尾加分号。否则,宏展开时,会将分号作为字符串的1个字符,用于替换宏名。
对双引号括起来的字符串内的字符,即使与宏名同名,也不进行宏展开。
3.指向数组的指针变量,可以指向数组以后的内存单元,虽然没有实际意义。
px±n:将指针从当前位置向前(+n)或回退(-n)n个数据单位,而不是n个字节。
px-py:两指针之间的数据个数,而不是指针的地址之差。
4.如果指针变量p已指向某结构数组,则p+1指向结构数组的下一个元素,而不是当前元素的下一个成员。
5.不能对共用变量进行初始化(注意:结构变量可以);也不能将共用变量作为函数参数,以及使函数返回一个共用数据,但可以使用指向共
用变量的指针。
6.按位左移:<<
使操作数的各位左移,低位补0,高位溢出
按位右移:>>
使操作数的各位右移,移出的低位舍弃;高位:
1)对无符号数和有符号中的正数,补0;
2)有符号数中的负数,取决于所使用的系统:补0的称为“逻辑右移”,补1的称为“算术右移”。
7.不同长度数据间的位运算──低字节对齐,短数的高字节按最高位补位:
(1)对无符号数和有符号中的正数,补0;
(2)有符号数中的负数,补1。
8.位段类型:一种特殊的结构类型
使用长度为0的无名位段,可使其后续位段从下1个字节开始存储。
1个位段必须存储在1个存储单元(通常为1字节)中,不能跨2个。如果本单元不够容纳某位段,则从下1个单元开始存储该位段。