C語言易錯點及難點

2021-10-22 09:30:58 字數 4556 閱讀 2426

獲得字串長度:strlen(s),需要標頭檔案#include

判斷兩個字元是否相等用==

判斷兩個字串相等:

if

(strcmp

(s1,s2)==0

),strcmp

(s1,s2)

相等返回0

想要輸入帶空格用gets(s)

標頭檔案stdlib.h中的方法atoi可以實現字串轉數字"996"轉為996

#include

intmain()

結果2,3

c語言右結合性,先執行--a,再執行a++

do while語句先執行在判斷

在ascii表中a和a相差32

多個數字呼叫函式,且沒有接收值時,如fun(a,b,c),需要用指標來改變大小改為fun(&a,&b,&c)

陣列呼叫函式可以直接改變大小也不需要接收值fun(a),a為陣列

int x=10;

printf

("%d,%d\n"

,x--

,--x)

;printf

("%d"

,x);

//輸出9,8

在switch(i++)先判斷switch(i),再++

#include

func

(int a,

int b)

main()

//輸出21

呼叫函式時fun(a++),傳的引數是a的值,不是a+1的值。

strcpy複製函式,將原字串覆蓋

strcat連線函式,在字串後面連線

int a=

;f(a+1);

表示傳的引數從第二個元素開始即 7,9

,9,11

,34

str2[3]

[5]=

;puts

(str2[1]

) 即輸出hi

字串讀取時若遇到人為賦值』\0』後面的都不進行讀取

char a[4]

[10]=

;int i =3;

char

(*p)[10

];for(p = a; p < a +

4; p++

, i--

)printf

("%c",*

((*p)+ i)

);

*p表示a[0][0]的位址**p表示a[0][0]

p+1表示a[0][1]的位址,(*p+1)表示a[0][1]

*p++表示a[1][0]的位址

unsigned將數字型有符號類轉換成無符號類,如int範圍 -231~231-1轉換為0~2^32

int x=10;

int y=10;

printf

("%d,%d\n"

,x--

,--y)

;輸出10

,9

#include

intmain()

0x表示16進製制,0表示8進製,>>表示右移

printf

("%d\n",(

0,0)

);printf

("%d\n",(

0,1)

);printf

("%d\n",(

1,0)

);printf

("%d\n",(

1,1)

);

逗號表示式的結果是用逗號分開的最後乙個表示式的 值

取反運算:a=-(a+1)即5=-6

#include

intmain()

printf

("%*c%.*s\n",3

,' ',4

,"*************");

等價於printf

("%3c%.4s\n"

,' '

,"*************");

//%.4s擷取字串長度為4

輸出3個空格4個*

#include

intmain()

總長度為50,字元為4;即46個空格+

4個字元(a bo)

在輸出格式描述 「%m.ns」 中,m 是輸出總長度, n 是實際字元的個數, 這裡 m 沒有給出,則輸出總長度就是實際輸 出字元的個數。

#include

intmain()

輸入1234567890

輸出a=

12 b=

345

fabs(a)取絕對值函式

#include

intmain()

//a[1]=10

//若a[1]=x++,x+3,x+7,則相當於a[1]=x;x++;x+3;x+7;

逗號運算子從左開始運算,結果只保留最後乙個,並賦值。

#include

void

fun(

int*s)

while

(++j<2)

;}intmain()

;for

(k=1

;k<

3; k++

)fun

(a);

for(k=

0;k<

5; k++

)printf

("%d"

,a[k]);

}//輸出35745

static在函式結束前只執行一次

#include

void

num(

)int x,y ;

intmain()

//輸出5,25,main 函式和 num 函式中都說明了變數 a 和 b,由於它們是內部變數,所以它們分別在說明它們的函式內有效。外部變數 x 和 y 在函式 num 之後被說明,而在 num 函式中又要引用它們, 所以在 num 函式中用關鍵字 "extern"說明變數 x和 y 是乙個外部變數,也就是通知計算機這兩個變數在 fun函式以外被說明,此處不是定義兩個 int 型變數。

#include

intmain()

//輸出12

#include

intmain()

;int

*p=a[0]

; p+=6

;printf

("%d "

,*p)

;/* ① */

printf

("%d ",*

(*(a+6))

);/* ② */

printf

("%d ",*

(a[1]+

=2))

;/* ③ */

printf

("%d",*

(&a[0]

[0]+

6));

/* ④ */}a)

7777 b) ②句語法錯誤 c) ③句語法錯誤 d) ④句語法錯誤

//②句沒有語法錯誤,但是 a+6 指向陣列之外,因為 a是 a[0]的位址, a+1 是 a[1]的位址, a+2 是 a[2]的位址,顯然陣列 a 沒有 a[6]分量。③句錯誤,因為 a[1]是位址常量,它是 a[1][0] 的位址,對於位址常量是不可以進行賦值運算的。

正確**:

#include

intmain()

;int

*p=a[0]

; p+=6

;printf

("%d "

,*p)

;printf

("%d ",*

(a[0]+

6));

printf

("%d ",*

(a[1]+

2));

printf

("%d",*

(&a[0]

[0]+

6));

}

#include

intmain()

//輸出2 2

p始終指向a的位址,a的值變化,位址不變。

#include

char

*pp[2]

[3]=

;int main (

)① a) a b) d c) i d) m

② a) a b) d c) i d) m

③ a) h b) l c) q d) w

④ a) k b) o c) u d) z

⑤ a) ijkl b) mnopqr c) stuvw d) xyz

//daddb

指標難點 易錯點

voidf char c intmain f c 這裡的f char c 指向指標的指標 所以呼叫時一定要 使用指標 c 3 定義指標陣列 c 第乙個指標變數的位址。指標的位址 用指向指標的指標存放 二 例如 int a 3 4 ptr2是乙個指向 int 的指標,即ptr2的型別和 ptr是一樣的...

C語言易錯點

c語言易錯點 1.每個c語言程式中main函式是有且只有乙個的。2.演算法可以沒有輸入,但必須要有輸出。3.在函式中不可以再定義函式。4.break可用於迴圈結構和switch語句。5.break和continue的區別在於前者是跳出迴圈,後者是結束本次迴圈。6.逗號的運算子的級別最低。7.c語言對...

C語言易錯點

1.c程式的原始檔拓展名為.c 2.include 是c語言的預處理指令之一,所謂預處理,就是在編譯之前做的處理,預處理指令一般以 開頭 3.乙個c程式中一定會有乙個main函式,也只能有乙個main函式。main函式是整個c程式的入口。1.在編譯前先執行 include指令,拷貝stdio.h的內...