C語言查漏補缺

2021-08-03 09:33:27 字數 3783 閱讀 1337

char a[2][20] ;

a[1]="hello";

這是錯誤的。c語言把這語句解釋為乙個指標與另乙個指標之間的(非法的)賦值運算。

但是在初始化時,

char a[2][20]=;

是允許的。對於字串陣列,可以使用

//法1

char * strs[2];

strs[1] = "hello";

//法2

char strs[2][20];

strcpy(&strs[1], "hello");

1. 助記口訣

括號成員第一;

全體單目第二;

乘除餘三,加減四;

移位五,關係六;

等於(與)不等排第七;

位與異或和位或,」三分天下」**十;

邏輯或跟與,十二和十一;

條件高於賦值

逗號運算級最低

2. 結合性

結合性是指:

當乙個運算物件兩側運算子的優先級別相同時, 運算物件與運算子的結合順序。

例如a-b+c, b兩側有-和+兩種運算子的優先順序相同, 按先左後右結合方向, b 先與減號結合, 執行a- b 的運算, 再執行加c 的運算。

大多數運算子結合方向是「自左至右」, 即: 先左後右,

除了自左至右的結合性外, c 語言有三類運算子參與運算的結合方向是從右至左。即:單目運算子, 條件運算子, 以及賦值運算子

3. 算數表示式計算順序

1. 先比較優先順序,優先順序高者先行

2. 同優先順序間按照結合性原則進行運算

在不包含switch的**中出現break或者continue,那麼break跳出迴圈體,而continue跳出本次迴圈

對於在迴圈中巢狀switch語句的**中,break僅跳出最內層的塊,這個塊若是switch,就僅跳出switch,而continue即使出現在switch塊中,因為continue的作用範圍僅針對 for while 之類的迴圈語句,故不起作用,依舊跳出本次迴圈

返回值:scanf()函式返回成功賦值的資料項數,讀到檔案末尾出錯時則返回eof。

可以在格式化字串中的」%」各格式化規定符之間加入乙個整數,表示任何讀操作中的最大位數

scanf()函式中沒有精度控制

如: scanf(「%5.2f」,&a); 是非法的。不能企圖用此語句輸入小數為2位的實數。

在輸入多個數值資料時,若格式控制串中沒有非格式字元作輸入資料之間的間隔則可用空格,tab或回車作間隔。

c編譯在碰到空格,tab,回車或非法資料(如對「%d」輸入「12a」時,a即為非法資料)時即認為該資料結束。

在輸入字元資料(%c)時,若格式控制串中無非格式字元,則認為所有輸入的字元均為有效字元。包括間隔字元(空格等)

格式符為%s時,則如果輸入資料出現空格或者換行符都會被當做結束符scanf函式第二個引數為變數位址,切記

返回值:*getchar和getch函式返回值是使用者輸入的第乙個字元的ascii碼*,如出錯返回-1

getchar和getch的區別:

獲取使用者輸入的時機不同

當程式呼叫getchar時.程式就等著使用者按鍵.使用者輸入的字元被存放在鍵盤緩衝區中.直到使用者按回車為止(回 車字元也放在緩衝區中).當使用者鍵入回車之後,getchar才開始從stdin流中每次讀入乙個字元.

getch直接從鍵盤獲取鍵值,不等待使用者按回車,只要使用者按乙個鍵,getch就立刻返回

函式執行後結果不同

switch(x)

定義:int p[n];

優先順序高,先與p結合成為乙個陣列,再由int*說明這是乙個整型指標陣列,它有n個指標型別的陣列元素。

定義int (*p)[n];

()優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的長度。

c語言中的結構體是指使用保留字struct開闢的一塊記憶體。這塊記憶體的大小是定義該結構體時的所有元素的空間和。

1. 定義

struct struct

;

2. 使用

struct struct s = ;

printf("%s",s.str);

c語言中的共用體是指使用保留字union開闢的一塊記憶體。這塊記憶體的大小取決於定義該union時的最大元素的長度。

1. 定義

union union

;

2. 使用

union union = ;

//注意: 共用體不能初始化。

printf("%s",u.str);

3. 共用體的儲存方式

共用體是以其子元素中空間占用最大的乙個為大小的一塊記憶體,共用體的指標是其所有子元素共同的首位址(也就是說,共用體中一次只能存放乙個子元素)。每次賦值,都將會從共用體頭指標開始,覆蓋掉原資料進行賦值。

在以下**中:

union union

;union union u;

u.str = "string";

u.a = 's';

printf("%c\\n",u.a);

printf("%s",u.str);

結果將會列印

s

string

因為u.s在為u.a賦值時被覆蓋了。"string"的前sizeof(u.a)個字元被覆蓋為"s"

4. 共用體本質是一塊記憶體空間

共用體本質上類似於malloc()開闢的一塊記憶體空間(並不完全一致,因為malloc()開闢的空間在堆記憶體區)。所以可以使用指標來靈活操作共用體。

union union

;int main()

; char * s;

s = (char *)&u;

s[0] = 's';

printf("%s",a);

}

最終輸出string。另外,由於使用指標s修改了共用體u,所以u.a的值為s

c語言查漏補缺 指標

1,表示式 p 和 優先順序相同,結合方向自右向左,因此等價於 p 也就是先得到p所指向的變數值 p 再使p p 1。注意區別 p 先取得當前p所指向的變數值,再使p指向後乙個變數,相當於a i p 先取得當前p所指向的變數值,再使p指向前乙個變數,相當於a i p 先使p指向後乙個變數,再取得當前...

c語言基礎查漏補缺

該部分只是用來記錄c語言模糊的知識點 以下寫法錯誤 char c 123 char c1 哦 1.作用 用來計算乙個變數或者乙個常量 一種資料型別所佔的記憶體位元組數。2.基本形式 sizeof 變數 常量 int size sizeof a sizeof 變數 常量 int size sizeof...

DOM查漏補缺

使用getattribute 方法只能獲取屬性的文字內容,比如script或者style就不方便了,因此建議使用屬性的方法來獲取,即elenode.attr這種形式 但是自定義的標籤屬性必須使用getattribute 方法來獲得。屬性的方法會返回undefined 修改class通過屬性名的方法是...