天天看點

C語言基礎(一)

C語言基礎(一)

C

  • C語言基礎(一)
    • HelloWorld程式
    • 基本資料類型
    • 輸入輸出函數
    • 變量
    • 指針
    • 函數參數的傳遞

C語言基礎(一)

本文适合有一定語言基礎的讀者閱讀

HelloWorld程式

  1. //引入頭檔案 
  2. #include <stdio.h> //printf輸出函數 
  3. void main(){ 
  4. printf("hello world\n");  
  5. // 暫停視窗 
  6. system("pause"); 

上面是用C語言編寫的列印“HelloWorld”程式。下面是該程式各條語句的作用:

  1. #include <stdio.h> 導入名為"stdio.h"的頭檔案。
  • 頭檔案作為一種包含功能函數、資料接口聲明的載體檔案,主要用于儲存程式的聲明(declaration),而定義檔案用于儲存程式的實作 (implementation)。
  • 頭檔案中含有函數的聲明,編譯時編譯器會根據頭檔案的聲明去找到函數的實作。例如:stdio.h頭檔案中就含有printf函數的聲明,編譯時,編譯器根據頭檔案的聲明去找到printf函數的實作printf.c源檔案。
  • 導入指定頭檔案的格式:#include <頭檔案名> 或 #include “頭檔案名”
  • #include<...> 是包含編譯器搜尋所帶的頭檔案,或者是PATH的環境變量中能找到的頭檔案。
  • #include "..." 是找目前目錄和PATH中所帶的頭檔案有沒有符合的。或者是你的編譯器加上指定頭檔案的路徑,也可以找到。
  1. void main()
  • main函數是程式的入口,程式總是從main函數開始執行。
  1. printf("hello world\n")
  • printf函數是C語言中的輸出函數
  1. system("pause")
  • 在Window系統下,C語言中的system函數可以執行dos指令。
  • 例如system("pause")就是執行pause指令,這條語句的作用就是讓視窗暫停。若沒有這條語句,我們隻能看到視窗一閃而過,而無法看到程式的輸出,因為程式很快執行完,一執行完畢,視窗就會關閉。

執行pause指令

  • 在Linux系統下,C語言中的system函數可以執行shell指令

基本資料類型

資料類型 占位符
short %d
int %d
long %ld
float %f
double %lf
char %c
十六進制 %x
八進制 %o
  1. #include <stdio.h> 
  2. void main(){ 
  3. short a = 12; 
  4. printf("短整型:%d\n", a); 
  5. int i = 1; 
  6. printf("整型:%d\n",i); 
  7. long l = 349374; 
  8. printf("長整型:%ld\n", l); 
  9. float f = 23.3f; 
  10. printf("單精度浮點型:%f\n", f); 
  11. double d = 343.434; 
  12. printf("雙精度浮點型:%lf\n", d); 
  13. char c = \'a\'; 
  14. printf("字元型:%d\n", c); 
  15. //基本資料類型所占的位元組數 
  16. printf("short占%d位元組\n", sizeof(short)); 
  17. printf("int占%d位元組\n",sizeof(int)); 
  18. printf("long占%d位元組\n", sizeof(long)); 
  19. printf("float占%d位元組\n", sizeof(float)); 
  20. printf("double占%d位元組\n", sizeof(double)); 
  21. printf("char占%d位元組\n", sizeof(char)); 
  22. // C語言編寫要符合C99标準,不然可能會導緻在Windows下能夠正常運作,而在Linux無法正常運作。 
  23. // C99标準的循環寫法 
  24. int n = 0; 
  25. for (; n < 10; n++){ 
  26. printf("%d\n",n); 
  27. // 不符合C99标準的循環寫法 
  28. for(int n = 0; n < 10; n++) { 
  29. printf("%d\n",n); 
  30. system("pause"); 

輸入輸出函數

  1. #include <stdio.h> 
  2. #include <stdlib.h> 
  3. void main(){ 
  4. int i; 
  5. printf("請輸入一個整數:"); 
  6. //指派 
  7. scanf("%d",&i); //控制台輸入,&取位址符 
  8. //列印 
  9. printf("i的值為:%d\n",i); 
  10. system("pause"); 

變量

在C語言中,變量即在程式運作過程中它的值是允許改變的量。為了将不同的變量區分開來,給各個變量命名。變量存儲在記憶體中,是以變量名實際上是對記憶體空間上一段資料的抽象。為了給不同的變量分類,給各個變量指定資料類型,如整型,浮點型,字元型變量等。不同資料類型的變量占用記憶體的空間和存儲的内容都不一樣。如整型變量存儲的是整數,字元型變量存儲的是字元,指針變量存儲的是記憶體位址等(雖然底層這些資料都是由0和1組成的)。

指針

除了那幾種基本資料類型之外,還有一種指針類型的變量,指針變量存儲的是變量的記憶體位址。例如,整型指針變量存儲的是整型變量的記憶體位址。記憶體位址,系統給資料配置設定的編号(門牌号)

  1. #include <stdio.h> 
  2. void main(){ 
  3. int i = 90; 
  4. //指針變量,建立一個int類型的指針 
  5. int* p = &i; //p的值就是i這個變量的記憶體位址 
  6. //%#表示的輸出提示方式,如果是8進制,在前面加0,如果是十進制,不加任何字元,如果是十六進制,會加上0x 
  7. printf("%#x\n",p); 
  8. float f = 89.5f; 
  9. //建立一個float類型的指針 
  10. float *fp = &f; 
  11. printf("%#x\n", fp); 
  12. system("pause"); 

函數參數的傳遞

在C語言中函數參數的傳遞有兩種方式:傳值與傳位址。

  1. 傳值就是将實參的值傳遞給形參,使得形參的值與實參一樣。
  • 通過傳值的方式将實參的值傳遞給形參,實際上隻是在記憶體中重新開啟一塊空間,并拷貝實參的值。對形參的修改操作僅僅隻是對另一塊記憶體空間的資料進行修改,不影響實參的值。
  1. 傳位址就是将實參所在記憶體單元的位址傳遞給形參,使得形參指向實參所在的記憶體位址。
  • 通過傳位址的方式将實參的位址傳遞給形參,形參指向實參所在的那塊記憶體空間,對形參的修改操作就是對存儲實參那塊記憶體中的内容進行修改,會影響實參的值。
  1. #include <stdio.h> 
  2. //傳值 
  3. void changeByValue(int i) { 
  4. i = 100; 
  5. //傳位址 
  6. void changeByAddress(int* p){ 
  7. *p = 300; 
  8. void main(){ 
  9. int i = 90; 
  10. //建立一個int類型的指針 
  11. int *p = &i; 
  12. //輸出位址 
  13. printf("p的位址:%#x\n",&p); 
  14. printf("i的位址:%#x\n",&i); 
  15. printf("i的值為:%d\n", i); 
  16. // 通過位址修改變量i的值 
  17. *p = 200; 
  18. printf("i的值為:%d\n", i); 
  19. changeByValue(i); 
  20. printf("通過值傳遞修改i的值:%d\n", i); 
  21. changeByAddress(&i); // int *p = &i; 
  22. printf("通過傳位址修改i的值:%d\n",i); 
  23. system("pause"); 

程式運作結果如圖:

傳值和傳位址

由程式的運作結果也可以看出,值傳遞無法修改實參的值,傳位址可以修改實參的值。

C語言基礎(一)