引入
近两个月的时间,顺着谭浩强老师的《C 语言程序设计(第四版)》,我们简要学习了一些 C 语言的知识,接下来三节,我们对常见问题和一些知识点进行回顾。
常见错误
我们梳理一下常见的错误。
混淆字符和字符串的表示形式
char m;
m="C";//这事不合法的,因为 m 是字符,用双信号包起来是 C+\0 的,所以会出错
m='C'
//改成单引号就对了!
自加和自减
在使用++和——的时候,要注意符号的优先级,比如在指针自加减时,因为++和——要高于*,所以先执行 p++,即* p++ 后再当做指针使用。
宁可多加括号,也要搞清楚使用方法!
记得提前声明自定义函数
如果我们在使用时,没有声明要使用的自定义函数,系统就会报错,所以在使用自定义函数前,一定要先声明,不一定非要在 main 函数声明,在使用前即可。
形参和实参的值
除非实参传递过去的是地址,否则形参永远也改变不了实参的值,因为是存储在不同地方的,怎么改嘛….
函数的形参和实参类型
调用函数时,实参类型一定要跟形参一直,否则就会按照形参的类型去处理,会出问题!
不同类型指针不能混用
不同类型的指针,不能直接混用赋值,否则因为类型不同,不能获取到正确的地址。
函数参数处理顺序
int i=3;
printf("%d,%d,%d",i,++i,++i);
我们以为会输出
3 4 5
但在某些编译器下,会输出:
5 5 4
这就是函数参数处理顺序的不同,有的从左向右,有的则相反
所以,建议
int i=3,j,k;
j=++i;
k=++i;
printf("%d,%d,%d",i,j,k);
这样写就保险很多!
混淆数组名和指针变量的区别
int main(){
int a,b[5];
for (a=0;a<5;a++){
scanf("%d",b++); //这样显然是不对的!
}
}
b 是数组名,b 表示的是 b[0] 的地址,地址是一个常量,所以不能进行改变的。我们应该用指针指向该数组。
int main(){
int a,b[5],*p;
p=b;
for(a=0;a<5;a++){
scanf("%d",p++);
}
}
混淆结构体类型和结构体变量
结构体类型是一种类型。
结构体变量是一种变量。
使用文件忘记打开了,或者打开方式不对
使用文件,一定记得要打开文件。
打开文件是读、写还是追加,二进制还是 ASCII 都要搞清楚
千万不要忘记关闭文件
我们知道缓存的概念,就应该知道如果不关闭文件,有些数据是在缓存中的,我们可能会丢失数据,所以一定要及时的关闭文件。
尾巴
这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。
评论