C语言复习-常见错误(下)-学习笔记-69

引入

近两个月的时间,顺着谭浩强老师的《C 语言程序设计(第四版)》,我们简要学习了一些 C 语言的知识,接下来三节,我们对常见问题和一些知识点进行回顾。

常见错误

我们梳理一下常见的错误。

混淆字符和字符串的表示形式

1
2
3
4
char m;
m="C";//这事不合法的,因为 m 是字符,用双信号包起来是 C+\0 的,所以会出错
m='C'
//改成单引号就对了!

自加和自减

在使用++和——的时候,要注意符号的优先级,比如在指针自加减时,因为++和——要高于,所以先执行 p++,即 p++ 后再当做指针使用。
宁可多加括号,也要搞清楚使用方法!

记得提前声明自定义函数

如果我们在使用时,没有声明要使用的自定义函数,系统就会报错,所以在使用自定义函数前,一定要先声明,不一定非要在 main 函数声明,在使用前即可。

形参和实参的值

除非实参传递过去的是地址,否则形参永远也改变不了实参的值,因为是存储在不同地方的,怎么改嘛….

函数的形参和实参类型

调用函数时,实参类型一定要跟形参一直,否则就会按照形参的类型去处理,会出问题!

不同类型指针不能混用

不同类型的指针,不能直接混用赋值,否则因为类型不同,不能获取到正确的地址。

函数参数处理顺序

1
2
int i=3;
printf("%d,%d,%d",i,++i,++i);

我们以为会输出
3 4 5
但在某些编译器下,会输出:
5 5 4
这就是函数参数处理顺序的不同,有的从左向右,有的则相反
所以,建议

1
2
3
4
int i=3,j,k;
j=++i;
k=++i;
printf("%d,%d,%d",i,j,k);

这样写就保险很多!

混淆数组名和指针变量的区别

1
2
3
4
5
6
int main(){
int a,b[5];
for (a=0;a<5;a++){
scanf("%d",b++); //这样显然是不对的!
}
}

b 是数组名,b 表示的是 b[0] 的地址,地址是一个常量,所以不能进行改变的。我们应该用指针指向该数组。

1
2
3
4
5
6
7
int main(){
int a,b[5],*p;
p=b;
for(a=0;a<5;a++){
scanf("%d",p++);
}
}

混淆结构体类型和结构体变量

结构体类型是一种类型
结构体变量是一种变量

使用文件忘记打开了,或者打开方式不对

使用文件,一定记得要打开文件
打开文件是读、写还是追加,二进制还是 ASCII 都要搞清楚

千万不要忘记关闭文件

我们知道缓存的概念,就应该知道如果不关闭文件,有些数据是在缓存中的,我们可能会丢失数据,所以一定要及时的关闭文件。

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。


-------------The End-------------
欢迎请我喝咖啡哦~!