C语言常见易错点解析

5星 · 超过95%的资源 需积分: 22 31 下载量 179 浏览量 更新于2024-09-15 3 收藏 35KB DOC 举报
"C语言易错点经典分析" 本文详细讲解了C语言中易错易混点,能够让开发者在开发中避免很多错误,同时也能考察自己的C语言水平的必备试题,更是面试过程中不可或缺的面试题目。 一、静态变量的初始化 在C语言中,静态变量的地址必须在编译过程中就确定下来,而malloc()申请的内存地址是在运行时确定的。因此,静态变量不能使用malloc()进行初始化,如char*p=malloc(10);编译器提示“非法初始式”。这是因为函数调用只能出现在自动变量(即局部非静态变量)的初始式中。 二、自增操作符的优先级 在C语言中,后缀++和--操作符本质上比前缀一目操作的优先级高。因此,*p++和*(p++)等价,它自增p并返回p自增之前所指向的值。如果要自增p指向的值,使用(*p)++,如果副作用的顺序无关紧要也可以使用++*p。 三、类型转换和指针运算 在C语言中,类型转换意味着“把这些二进制位看作另一种类型,并作相应的对待”。这是一个转换操作符,根据定义它只能生成一个右值(rvalue)。而右值既不能赋值,也不能用++自增。如果要达到跳过int型变量的目的,可以用:p=(char*)((int*)p+1);或者,因为p是char*型,直接用p+=sizeof(int)。 四、空指针和未初始化的指针 在C语言中,空指针在概念上不同于未初始化的指针:空指针可以确保不指向任何对象或函数;而未初始化指针则可能指向任何地方。 五、表示空指针 根据语言定义,在指针上下文中的常数0会在编译时转换为空指针。也就是说,在初始化、赋值或比较的时候,如果一边是指针类型的值或表达式,编译器可以确定另一边的常数0为空指针并生成正确的空指针值。然而,在函数调用的上下文中生成空指针需要明确的类型转换,强制把0看作指针。 通过分析这些易错点,开发者可以更好地理解C语言的语法和semantics,从而避免很多错误,提高开发效率和质量。同时,这些问题也是面试过程中不可或缺的试题,能够考察开发者的C语言水平和编程能力。