计算机二级C语言考试旨在测试学生的计算机编程能力和实践技能。在考试中,常会涉及到一些常见易错的知识点。正确掌握这些知识点可有效提高考试成绩。
下面列举并详细阐述了10个常见易错的知识点。
变量声明和初始化的区别:错误示例:
int a; // 变量声明
printf("%d", a); // 没有初始化,输出结果随机
正确示例:
int a = 0; // 变量声明并初始化
printf("%d", a); // 结果输出为0
strcpy和strncpy函数的使用:错误示例:
char str1[10] = "Hello";
char str2[5];
strcpy(str2, str1); // 错误,str2容量不足
正确示例:
char str1[10] = "Hello";
char str2[6];
strcpy(str2, str1); // 正确,复制完整个字符串
整型变量和字符型变量的相互转换:错误示例:
char c = 'A’;
int a = c; // 错误,将char型变量赋值给int型变量时,要显式转换类型
正确示例:
char c = 'A’;
int a = (int)c; // 正确,显式转换char型为int型
条件运算符的优先级:错误示例:
int a = 3, b = 4, c = 5;
(a > b) ? c = a : c = b 1; // 错误,条件运算符优先级低于算术运算符,需要加上括号
正确示例:
int a = 3, b = 4, c = 5;
(a > b) ? (c = a) : (c = b 1); // 正确,正确使用括号
空指针的使用:错误示例:
int *p;
*p = 10; // 错误,空指针没有指向有效的地址
正确示例:
int *p = NULL;
// 或 int *p = 0; 空指针也可以初始化为0
函数调用时参数传递的方式:错误示例:
void func(int *a) {
*a ;
}
int main() {
int a = 1;
func(a); // 错误,不能将int型变量传递给int*型的参数
}
正确示例:
void func(int *a) {
(*a) ;
}
int main() {
int a = 1;
func(&a); // 正确,将指向a的地址传递给函数
}
函数的递归调用:错误示例:
int fact(int n) {
fact(n-1); // 错误,缺少跳出递归的条件
}
正确示例:
int fact(int n) {
if (n == 1) {
return 1;
} else {
return n * fact(n-1); // 正确,设置跳出递归的条件
}
}
宏定义的使用:错误示例:
#define PI 3.1415926
float PI = 3.14; // 错误,和宏定义名字重复了
正确示例:
#define PI 3.1415926
float circleArea(float r) {
return PI * r * r;
} // 正确,宏定义指定了圆周率的值
好的,以下是关于字符串sizeof和strlen易错点的详细说明。
字符串sizeof运算符的使用:使用sizeof运算符时,需要注意它只能得到字符串指针所占用的字节数(在32位系统下,一般为4个字节),而无法通过sizeof得到字符串中实际字符的个数。如果想得到字符串中实际字符的个数,应该使用strlen函数。
例如:
char str[] = "hello world";
int size = sizeof(str); // size是4,无法得到字符串的实际长度
size = strlen(str); // size是11,得到字符串中实际字符的个数
字符串strlen函数的使用:strlen函数用于计算字符串中实际字符的个数,但需要注意的是,在C语言中,字符串必须以空字符’\0’结尾,否则strlen函数可能会计算出错误的结果。
例如:
char str1[] = "hello world";
char str2[] = {’h’, 'e’, 'l’, 'l’, 'o’, 'w’, 'o’, 'r’, 'l’, 'd’};
int len1 = strlen(str1); // len1是11,因为字符串以’\0’结尾
int len2 = strlen(str2); // 可能会导致程序崩溃或不可预测的错误,因为str2没有以’\0’结尾
因此,为了保证程序稳定性,应该在定义字符串时,始终以’\0’作为字符串的结尾。
例如:
char str3[] = {’h’, 'e’, 'l’, 'l’, 'o’, '\0’};
int len3 = strlen(str3); // len3是5,因为字符串以’\0’结尾