目錄
變數與函式
指標與陣列
位運算運算子和優先順序
持續更新中。。。。。。
變數既可以定義為外部的(全域性的)也可以定義為區域性的;函式只能定義為全域性的,也就是說不能在函式中再定義函式。
全域性變數和函式從其宣告的地方開始生效,到其所在檔案末尾失效。
函式的宣告既可以在函式外部也可以在函式內部(對於函式來說宣告不同於定義),以int max(int x, int y)為例:
在函式外宣告:
...
int max(int x, int y); //宣告函式
int main()
int max(int x, int y) //函式定義
...
在函式內部宣告(只在宣告其的函式內部生效):
...
int main()
int max(int x, int y) //函式定義
...
c語言的一大優點就是將指標、陣列和位址的算術運算結合起來。使用陣列下標所能完成的操作用指標都能完成。一般來說,用指標編寫的程式比用陣列下標編寫的程式要快,因為所有的下標都要轉換為指標形式,如:
在取a[i]值時c語言要首先轉化為位址a+i然後在訪問其值。
有效的指標運算:相同型別指標之間的賦值運算、指標同整數之間的加減運算、指向相同陣列中的兩個指標之間的減法或賦值運算、將指標賦值為0或與0之間的比較運算。
void * 指標指向空型別的元素,且任何型別的指標轉換為void *,並且在將它轉換回原來的型別時不會丟失資訊,可用於編寫一些可復用、通用性好的函式,如malloc函式。
&:常用來將某位數置為0,如:11110110 & 11111101 = 11110100將第二位置為0,別的位保持不變。
|:常用來將某位數置為1,如:11110110 | 00001000 = 11111110將第四位置為1,別的位保持不變。
^:常用來將某位數取反;乙個數和同乙個數^兩次還是它自己,即a^b^b = a。如:11110110 ^ 00000010 = 11110100將第二位取反,別的位保持不變。也可以用來交換兩個數:
int a = 20, b = 10;
a = a ^ b;
b = a ^ b; //b = a ^ b = (a ^ b) ^ b = a
a = b ^ a; //a = b ^ a = a ^ (a ^ b) = b
c語言中的單目運算子(除()、)都是自右向左結合的,的優先順序較高,可注意int *a[5]與int (*a)的不同。
條件運算子?:也是自右向左結合。
「.」、「->」、「()」和「」4個運算子優先順序最高。
c語言沒有指定同一運算子中多個運算元的計算順序(除&&、||、?:和,),也沒有指定函式中各引數的求值順序,如:
a[i] = i++; //不能確定a[i]中i的取值,可能取i加1之前的值也有可能取i+1後的值
printf(「%d %d\n」, ++n, power(2, n)); //不能確定power(2, n)的呼叫是在++n之後還是之前
所以應當盡量避免使用此種含糊不清的語句。
運算子優先順序例子
例1:比較*s++、(*s)++、*++s和++*s
*s++ 等價於*s, s++;
(*s)++ 等價於*s += 1;
*++s等價於++s,*s;
++*s等價於++(*s)。
例2:結構體
struct *p;
比較++p->len、(++p)->len、(p++)->len、*p->str、*p->str++、*p++->str
++p->len:隱含括號關係++(p->len),將len的值加1
(++p)->len:先執行p的加1操作,再取len的值
(p++)->len:先取len的值,再執行p的加1操作
*p->str:隱含括號關係*(p->str),取指標str指向的值
*p->str++:隱含括號關係*(p->str)++,先取指標str指向的值,再將str加1,與*s++相同
*p++->str:*p->str, p += 1;
*++p->str:p += 1, *p->str
C語言學習總結
1 c語言中有乙個賦值表示式,是其他多數高階語言中沒有的。2 c 語言的輸入與輸出操作是由函式來完成的,它不提供輸入輸出語句。3 c語言中有乙個共用體,其變數所點記憶體長度是其最長 成員變數的長度。4 static char a language char p a 8 5 void main int...
C語言學習總結
看了李明杰老師的c 語言課程,感覺老師講得很細 很透。收穫了很多新的知識,對cc 語言課程的學習總結。1.執行c 語言程式的步驟 1 編寫 c原始檔 2 編譯 c原始檔為 o目標檔案 3 鏈結 o目標檔案為可執行檔案 4 執行可執行檔案 2.常用格式符 1 d i 整數 int 2 f 小數 flo...
C語言學習總結
無參巨集定義 即巨集名後不帶引數。其定義的一般形式為 define 識別符號 字串其中各個名稱的含義如下 1 其中的 表示這是一條預處理命令。凡是以 開頭的均為預處理命令。2 define 為巨集定義命令。3 識別符號 為所定義的巨集名。4 字串 可以是常數 表示式 格式串等。例如 define m...