天天看點

計算機二級C語言常見易錯的10個知識點

作者:霸都嵌入式

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