C语言易混易错知识点

时间:2022-11-09 12:41:59

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一起表示,

跳过当前输入字符串,指向下一个。