計算機二級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’結尾