一个文件的全局变量定义成静态变量,就说明该变量只能被该文件调用。其他文件同名的函数不冲突;但限制其使用范围。
const修饰的是只读变量。可以自增自减。
int const *a=const int *a
Int *const a;a是一个指向int型的const指针,*a是可以改写的,但a不允许改写。所以这种情况必须将a=&i;即将a初始化。
int const * const a;
a是一个指向const int型的const指针,因此*a和a都不允许改写。
extern 默认声明,扩展变量的使用范围。
struct:将多种数据结合起来的一个整体,其表现形式是一个结构体。
形成新的数据类型。
内存空间是分配给变量的,不是分配给数据类型的。
struct node
{............
}; 这里的分号不能忘。
C语言中的成员运算符:. 、→。
数组名不能作为组值。
不能将结构体变量作为一个整体输入输出。
printf(“%d%s%f”,stu1);scanf(“%d%s%f”,&stu1);错误!
只能一个个输入输出。
固定长初始化
二维数组两个方括号,只能第一个可以空。
只有short类型时,则以占2个字节半字对齐。
有int类型时,则以占4个字节字对齐。
以上都没有时,则一个算一个。
Union共用(联合)体:当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体。
Big_endian大端字节序:数据的高字节位存储在低地址对应的存储单元;
Little_endian小端字节序:数据的低字节位存放在低地址对应的存储单元。
字符串是用字符数组处理的,没有字节序的概念。
Enum:枚举类型
enum的默认值:
Enum kids{nippy,slats,skippy,nina,liz};
enum的指定值:
Enum levels
{low=100,medium=500,high=2000};
enum的用法:作为switch的标签。
Typedef:是C语言的关键字,其作用是为一种数据类型定义一个新名字。
格式: typedef 数据类型 自定义数据类型
定义常量与命令(避免幻数)
#define MAX 100 宏名 宏体
#开头的都是预处理命令
预处理的过程叫宏展开也叫宏替换
结构简单、使用频率高的算法写成宏函数。
调试:
#if 0/1
.....
#endif
浮点数不能与零值比精度。
指针的零就是空。
当前循环:for、while、do while
C语言没有直到循环
a、b交换三种方式:
- a=a+b;b=a-b;a=a-b
- a=a^b;b=a^b;a=a^b
- t=a;a=b;b=t
在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。
如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。
goto使用场合:在多重嵌套时,从最内部调到最外部时使用。在同一函数内!
位运算:
&:按位与,对应位均为1时才为1,否则为0
|:按位或,对应位均为0时才为0,否则为1
^:按位异或:对应位相同时为0,不同时为1
~:按位取反:各位反转,即原来的1的位变成0,原来为0的位变成1(主要用于间接构造一个数,以增强程序的可移植性)
>>按位右移:是操作数的各位右移,移出的低位舍弃;高位:(1)对无符号数和有符号中的正数,补0;
(2)有符号数中的负数,取决于使用的系统:补0的称为“逻辑右移”,补1的称为“算术右移”。例如,20>>2=5。