《C語言程式設計》筆記

2021-09-26 07:04:05 字數 2748 閱讀 6034

2.stdio是standard input/output 的縮寫,即標準輸入輸出。有關輸入輸出的函式的格式均定義這裡

3.float 4個位元組,double 8個位元組,short 2個位元組,int和long 4個位元組(這裡指的是vs,有一些軟體不一樣)

4.314.159 規範化的指數形式為:3.14159e+002,或者也可以表示成 3141.59e-001

5.資料之間的轉換:

/1:將字元型資料賦給整型變數:因為字元型變數佔8位,整型變數在記憶體中至少佔16位,所以有的系統會把多餘的位都賦0,有的系統會根據字元型資料的最高位的值來決定補1還是補0。

/2:整型之間的轉換:將佔位數少的變數賦值給佔位數多的變數的時候,原值傳送到佔位數多的變數的低位,此時注意其他高位的符號擴充套件問題。而將佔位數多的變數賦值給佔位數少的變數時,可能會丟失資料。

6.注意i++和++i之間的區別

7.a=b=c=5分開就是:c=5,b=c,a=b。但是在變數的宣告過程中不允許給連續多個變數賦值。

8.逗號運算子:i=(表示式1,表示式2……),先執行表示式1,再執行表示式2,最後乙個表示式的值賦給i。

9.printf()和scanf()函式的輸出格式字元:

u:無符號十進位制整數

e/e/g/f/g:浮點數

x/x:十六進製制整數

l/h:輸出長/短整型資料

o:八進位制整數

printf("%-7.5lf",a);

加符號是向左對齊,7是資料輸出的最小寬度,如果超出,欄位會自動加長長度,.5是浮點型後面顯示的小數字數。

10.getchar()獲取乙個字元,putchar()輸出乙個字元,getch()獲取乙個字元但是在螢幕上看不到輸入的這個字元,可以用於使用者輸入密碼。

11.vs裡面好像不可以用scanf()函式,要用scanf_s()代替。好像也不可以用getch()函式,要用_getch()代替。

12.二進位制和八進位制和十六進製制的負數問題:

13.條件運算子/三目運算子:表示式1?表示式2:表示式3,含義為:表示式1的值為真時,取表示式2的值為該條件表示式的值,否則取表示式3的值為該條件表示式的值。

14.goto:先在函式的某個地方寫乙個語句標號,比如loop:,然後goto loop;則會讓程式無條件地跳轉到loop標識的地方執行。

15.二維陣列元素的初始化:int b[2][3]= , };相當於b[0][0]=1,b[0][1]=2,b[0][2]=0,b[1][0]=3,b[1][1]=0,b[1][2]=0。

16.變數的劃分:變數有作用域和儲存類別兩個屬性,從作用域劃分可以把變數分為區域性變數和全域性變數,全域性變數又分為程式級全域性變數和檔案級全域性變數。從儲存類別劃分可以把變數分為靜態儲存變數(static)和動態儲存變數,動態儲存變數又分為自動儲存型別變數(auto)和暫存器儲存型別變數(register)。

程式級全域性變數作用域大於檔案級全域性變數,程式級全域性變數在程式的某個檔案中定義後,程式的其他檔案中如果要使用它,只需要用extern宣告。檔案級全域性變數定義時要用說明符static進行宣告,檔案級全域性變數的作用域是它所在的程式檔案,它不可以被其他程式檔案所使用,所以用static宣告的全域性變數可以限制它的作用域的擴充套件,達到資訊遮蔽的目的。

自動儲存型別變數是系統預設的型別,暫存器儲存型別變數的儲存單元被分配在暫存器中,而暫存器的訪問速度比記憶體的訪問速度快的多,所以通常將頻繁使用的變數放在暫存器中。靜態儲存變數占用靜態儲存區的固定的記憶體單元,即使它所在的函式呼叫結束,也不會釋放該儲存單元,其值會被繼續保留,且它在編譯的時候被分配記憶體、賦初值,且只被賦初值一次。

17.c程式執行時占用的記憶體空間分為三部分:程式區、靜態儲存區和動態儲存區。程式執行期間的資料分別存放在靜態儲存區和動態儲存區中。

靜態儲存區用來存放程式執行期間所需占用固定儲存單元的變數,如全域性變數和靜態類別的區域性變數。

動態儲存區存放不需要長期占用記憶體單元的變數,當程式執行進入定義變數的函式或者復合語句時才為變數分配動態儲存空間,當離開函式或者復合語句時便釋放所占用的記憶體空間。分配和釋放是動態的,所以如果在乙個程式中兩次呼叫同乙個函式,那麼分配給此函式中的區域性變數的儲存空間位址可能不相同。

//只有區域性變數和形參可以作為register變數,全域性變數不行。

//register變數不可以用取址符。

//好像現代c語言編譯的時候會自動選擇將變數儲存在記憶體中還是暫存器中,而且還很智慧型,所以不用使用register型別變數,存疑。

//在vs裡面,不可以用auto int 定義變數,auto 直接加變數名,且必須給變數賦乙個初值,系統會根據這個初值選擇變數的型別。

18.函式分為內部函式和外部函式,內部函式要用static定義,只可以在該原始檔中被呼叫,外部函式用extern或者省略,宣告之後可以被程式中的其他原始檔中的函式所呼叫。

//利用好靜態函式和檔案級全域性變數可以一定程度上不用考慮重名的問題。

19.預處理命令:

1/帶引數的巨集定義:#define s(a,b,h) (a+b)*h/2 定義完之後在程式中只需使用s(1,2,3)就可以完成 (a+b)*h/2 的計算。

巨集展開在編譯時進行,所以不占用程式執行時間,在展開時並不分配記憶體單元,只是替換,而如果要使用函式的話,既占用程式執行時間,而且還要考慮形參和函式的型別問題,而且還要為形參分配臨時的記憶體單元。

2/條件編譯

1)#if 格式:#if…#else…#endif

2)#ifdef格式:#ifdef…(#else)…#endif

3)#ifndef格式: ifndef…(#else)…#endif

ifdef是if define的簡寫,ifndef是if not define 的簡寫。

C程式語言 筆記

第二章 型別符號表示式 2.9 按位與 可用於遮蔽某些二進位制位 如 n 0177 按位或 可以將某些位置1 如 n 011 按位取反 可以用於如將後六位置0 n 077 這樣的用法比 n 0177700這樣的表示式好很多,前者可移植性強。左移右移的右值不能為負 return x p 1 n 0 2...

C語言程式設計筆記

編譯源程式生成二進位制 表示的目標程式 乙個二進位制檔案,檔案字尾為obj 不能直接執行該目標程式,它需要與程式設計環境提供的庫函式進行鏈結,形成可執行的程式 檔案字尾為exe 如果源程式有語法錯誤,編譯器就會指出該語法錯誤所在,而不生成二進位制 整型變數所需儲存空間與編譯系統有關,在visual ...

c程式語言筆記1

列印最長輸入行的程式 include define maxline 1000 允許的輸入行的最大長度 int getline char line,int maxline void copy char to,char from 列印最長的輸入行 main if max 0 printf s longe...