大学C语言考试易错知识点总结,c语言易错知识点( 四 )


char (*p)[4];
p=a;
printf("%s",*(p+1));
return 0;
}
这里输出的就是第二个字符串I
具体的分类为:

大学C语言考试易错知识点总结,c语言易错知识点

文章插图
? 字符数组赋值问题
我们知道我们可以这样声明一个字符数组:
char a[12]="helloworld!";
但是,字符数组在被定义之后,是不被允许这样直接赋值的 。
比如下面这段代码是不会通过编译的:
char a[12];
a="helloworld!";
结构体相关
? 结构体所包含的变量不可初始化
这一点在C++中是被允许的,但是C中是不允许的 。
所以习惯了写C++的同学尤其需要注意 。
不要忘记了 。
? 查看结构体内部变量所占内存大小
这里我们只举个例子,比如我们有ABC这个结构体,它有变量x,
则sizeof(((struct ABC*)0)->x)得到的就是x占用的内存大小 。
这里的0,只要是int型的量就可以 。
库函数相关
? 绝对值函数
注意math.h中有两个绝对值函数,一个是abs(),另一个是fabs()
其中前者是处理整型变量的,而后者是处理浮点型变量的
scanf()和printf()的返回值问题
我们通常会把它们当作输入输出语句使用,单独成行,总是自动忽略它们的返回值,但其实它们是有返回值的 。
那么它们的返回值是什么呢?
printf的返回值是输出的数据个数,而scanf的返回值则是读入的数据个数 。
我们可以来看个例题:
#include
int main(){
int x;
printf("2:%d",printf("1:%d,",scanf("%d",&x)));
return 0;
}
请问它的输出结果是什么?
答案是
1:1,2:4
为什么是4?不知道你是不是想这么问 。
printf中所说的数据个数,其实是把输出的每个字符都看成一个单独的数据,也就是有多少字符加上我们传入的数据,就是它的返回值 。
? fclose()的返回值问题
和scanf、printf一样,我们经常忽略fclose的返回值,其实他也是有返回值的 。
如果成功关闭流,那么返回0,如果未成功关闭则返回-1 。
预编译相关
? 注意宏定义的替换原则
我们知道宏定义实际上只是字符串的替换,并不是函数一样的东西,所以我们在做题时也需要严格替换,替换完成之前,不要进行任何计算 。
大学C语言考试易错知识点总结,c语言易错知识点

文章插图
我们举个例子:
答案是多少?54?那就错了 。实际上应该是48.
【大学C语言考试易错知识点总结,c语言易错知识点】这里我们不能把5+1算出来6再带入,而是直接代入,这样你就会发现,5和1不是直接加在一起的 。

推荐阅读