常見易錯點
-
=
與==
混淆柒傻。
- 循環(huán)后面加了
;
。
- 鏈接錯誤是因為找不到某函數(shù)聲明對應的函數(shù)實現(xiàn)较木。
- 無限循環(huán):
for (char ch = 0; ch <= CHAR_MAX; ch++);
- 動態(tài)分配內存需要檢查是否分配成功红符。
-
extern char *hello
和extern char hello[]
不一樣,前者為聲明字符指針伐债,后者為聲明字符數(shù)組预侯。
- 求值順序無法確定:
y[i] = x[i++]
y[i++] = x[i]
-
char
的取值范圍是依據(jù)范圍而確定,有些是-127至128峰锁,有些是0-255萎馅,應使用unsigned char
而不要使用char
。
- 以下代碼是錯誤的虹蒋,因為getchar()的返回值為int糜芳,若char是0-255,則永遠也不會等于EOF魄衅。應將c聲明為int峭竣。
char c;
while ((c = getchar()) != EOF);
- 以文件讀寫模式
"r+"
打開,要從讀入文件狀態(tài)切換成寫入文件狀態(tài)晃虫,或者從寫入文件狀態(tài)切換成寫入文件狀態(tài)邪驮,需要調用fseek()
或者fsetpos()
來改變文件狀態(tài)。文件的起始狀態(tài)則看第一次對文件的操作為讀取還是輸入傲茄。
- 除余
%
所得結果的符號由左操作數(shù)決定毅访。
數(shù)組
代碼
#include <cstdio>
int main() {
int a[3][3];
printf("a = %p\n", a);
printf("&a = %p\n", &a);
printf("* a = %p\n", * a);
printf("a[0] = %p\n", a[0]);
printf("&a[0] = %p\n", &a[0]);
printf("&a[0][0] = %p\n", &a[0][0]);
return 0;
}
結果
a = 0060FF0C
&a = 0060FF0C
* a = 0060FF0C
a[0] = 0060FF0C
&a[0] = 0060FF0C
&a[0][0] = 0060FF0C
可變參數(shù)
簡介
-
va_list
:用于聲明可變參數(shù)名字。
-
va_start
:通過傳入省略號前一個參數(shù)盘榨,來定位可變參數(shù)開始位置喻粹。
-
va_arg
:通過傳入類型來確定每個實參數(shù)據(jù)類型。
-
va_end
:用于結束草巡。
簡單示例
#include <cstdio>
#include <cstdarg>
#include <cstdlib>
void print_arg(int n, ...) {
int temp;
va_list arg;
va_start(arg, n);
while (n--) {
temp = va_arg(arg, int);
printf("%d\n", temp);
}
va_end(arg);
}
int main() {
print_arg(3, 10, 20, 30);
return system("pause");
}
do while (0)
#define FOO(x) foo(x); bar(x)
if (condition)
FOO(x);
else // syntax error here
...;
- 加上大括號的解決方案不夠好守呜,需要有意識去省略分號:
#define FOO(x) { foo(x); bar(x); }
if (condition)
FOO(x)
else
...;
- 使用
do { … } while (0)
可以完美解決問題:
#define FOO(x) do { foo(x); bar(x); } while (0)
if (condition)
FOO(x);
else
....;
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者