1、声明可变长数组
Int a[*]; // 可变长数组不是动态的,可以变化的是数组大小
这样的写法不能用在全局或者共用体里
2、字符常量
字符常量只能用单引号括起来,不能用双引号。
字符常量只能是单个字符,不能是字符串。
字符串常量长度应加上\0;
3 非整形变量比较例如:float a=1.0,b=1.0;
if(a==b)//这句话是错的,因为计算机内部表示浮点数a=1.00003;
正确方法为|a-b|<1e-6;
4 %运算符
如果一个操作数不为整数,编译器将无法通过
5 int 与char类型的转换
必须在ACSII范围内,即0-255,不然会出错
6 register修饰的变量
含register修饰的变量,能提高运行速度,但不能对register修饰的变量取地址&
7 编译预处理
每条指令必须单独占一行;每行末尾不能加分号
8 空指针和野指针
空指针指的是未指向任何数据单元的指针,一般原因为访问NULL指向的单元的后果
野指针指的是指向不明的单元的指针,一般原因为free掉的指针,未初始化的指针,从函数返回的局部变量指针,对指针进行的数学运算不当。
9.指针处理
(1)在给指针赋值的时候,得注意指针的类型。
eg: char a; char *pa; pa=&a;
char c[4]; char (*pb)[4]; pb=&c;
(2)强制类型转换时,得注意大小端格式。
int s;
int *a;
a=&s;
s=0x11223344;
如果*(char *)a 等于0x44则为小端格式,否则为大端格式。
(3)字符串
char s[20[="hello world!"; //可修改
char *s="hello world!" //不可修改,只读。
下面的情况则可以:
char s[20]="hello world!';
char *ps;
ps=s;//则可以通过ps对字符串修改了。
(4)数组名
不能自增,但通过函数传递,变为指针变量时,就可以了,函数传递之后,指向地址相同,但指针所表示的内容不同了
10、scanf()函数
scanf("%d,%d",&a,&b)输入时必须为3,4这样不能为3 4
scanf("%d%d",&a,&b)此时输入为3 4,不能为3,4
scanf("%*s",s)* 是scanf函数中的一种修饰符, 表示输入项输入后不转送给任何变量,%*s一起表示,
跳过当前输入字符串,指向下一个。