C語言基礎(一)
C
- C語言基礎(一)
- HelloWorld程式
- 基本資料類型
- 輸入輸出函數
- 變量
- 指針
- 函數參數的傳遞
C語言基礎(一)
本文适合有一定語言基礎的讀者閱讀
HelloWorld程式
- //引入頭檔案
- #include <stdio.h> //printf輸出函數
- void main(){
- printf("hello world\n");
- // 暫停視窗
- system("pause");
- }
上面是用C語言編寫的列印“HelloWorld”程式。下面是該程式各條語句的作用:
- #include <stdio.h> 導入名為"stdio.h"的頭檔案。
- 頭檔案作為一種包含功能函數、資料接口聲明的載體檔案,主要用于儲存程式的聲明(declaration),而定義檔案用于儲存程式的實作 (implementation)。
- 頭檔案中含有函數的聲明,編譯時編譯器會根據頭檔案的聲明去找到函數的實作。例如:stdio.h頭檔案中就含有printf函數的聲明,編譯時,編譯器根據頭檔案的聲明去找到printf函數的實作printf.c源檔案。
- 導入指定頭檔案的格式:#include <頭檔案名> 或 #include “頭檔案名”
- #include<...> 是包含編譯器搜尋所帶的頭檔案,或者是PATH的環境變量中能找到的頭檔案。
- #include "..." 是找目前目錄和PATH中所帶的頭檔案有沒有符合的。或者是你的編譯器加上指定頭檔案的路徑,也可以找到。
- void main()
- main函數是程式的入口,程式總是從main函數開始執行。
- printf("hello world\n")
- printf函數是C語言中的輸出函數
- 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 |
- #include <stdio.h>
- void main(){
- short a = 12;
- printf("短整型:%d\n", a);
- int i = 1;
- printf("整型:%d\n",i);
- long l = 349374;
- printf("長整型:%ld\n", l);
- float f = 23.3f;
- printf("單精度浮點型:%f\n", f);
- double d = 343.434;
- printf("雙精度浮點型:%lf\n", d);
- char c = \'a\';
- printf("字元型:%d\n", c);
- //基本資料類型所占的位元組數
- printf("short占%d位元組\n", sizeof(short));
- printf("int占%d位元組\n",sizeof(int));
- printf("long占%d位元組\n", sizeof(long));
- printf("float占%d位元組\n", sizeof(float));
- printf("double占%d位元組\n", sizeof(double));
- printf("char占%d位元組\n", sizeof(char));
- // C語言編寫要符合C99标準,不然可能會導緻在Windows下能夠正常運作,而在Linux無法正常運作。
- // C99标準的循環寫法
- int n = 0;
- for (; n < 10; n++){
- printf("%d\n",n);
- }
- // 不符合C99标準的循環寫法
- for(int n = 0; n < 10; n++) {
- printf("%d\n",n);
- }
- system("pause");
- }
輸入輸出函數
- #include <stdio.h>
- #include <stdlib.h>
- void main(){
- int i;
- printf("請輸入一個整數:");
- //指派
- scanf("%d",&i); //控制台輸入,&取位址符
- //列印
- printf("i的值為:%d\n",i);
- system("pause");
- }
變量
在C語言中,變量即在程式運作過程中它的值是允許改變的量。為了将不同的變量區分開來,給各個變量命名。變量存儲在記憶體中,是以變量名實際上是對記憶體空間上一段資料的抽象。為了給不同的變量分類,給各個變量指定資料類型,如整型,浮點型,字元型變量等。不同資料類型的變量占用記憶體的空間和存儲的内容都不一樣。如整型變量存儲的是整數,字元型變量存儲的是字元,指針變量存儲的是記憶體位址等(雖然底層這些資料都是由0和1組成的)。
指針
除了那幾種基本資料類型之外,還有一種指針類型的變量,指針變量存儲的是變量的記憶體位址。例如,整型指針變量存儲的是整型變量的記憶體位址。記憶體位址,系統給資料配置設定的編号(門牌号)
- #include <stdio.h>
- void main(){
- int i = 90;
- //指針變量,建立一個int類型的指針
- int* p = &i; //p的值就是i這個變量的記憶體位址
- //%#表示的輸出提示方式,如果是8進制,在前面加0,如果是十進制,不加任何字元,如果是十六進制,會加上0x
- printf("%#x\n",p);
- float f = 89.5f;
- //建立一個float類型的指針
- float *fp = &f;
- printf("%#x\n", fp);
- system("pause");
- }
函數參數的傳遞
在C語言中函數參數的傳遞有兩種方式:傳值與傳位址。
- 傳值就是将實參的值傳遞給形參,使得形參的值與實參一樣。
- 通過傳值的方式将實參的值傳遞給形參,實際上隻是在記憶體中重新開啟一塊空間,并拷貝實參的值。對形參的修改操作僅僅隻是對另一塊記憶體空間的資料進行修改,不影響實參的值。
- 傳位址就是将實參所在記憶體單元的位址傳遞給形參,使得形參指向實參所在的記憶體位址。
- 通過傳位址的方式将實參的位址傳遞給形參,形參指向實參所在的那塊記憶體空間,對形參的修改操作就是對存儲實參那塊記憶體中的内容進行修改,會影響實參的值。
- #include <stdio.h>
- //傳值
- void changeByValue(int i) {
- i = 100;
- }
- //傳位址
- void changeByAddress(int* p){
- *p = 300;
- }
- void main(){
- int i = 90;
- //建立一個int類型的指針
- int *p = &i;
- //輸出位址
- printf("p的位址:%#x\n",&p);
- printf("i的位址:%#x\n",&i);
- printf("i的值為:%d\n", i);
- // 通過位址修改變量i的值
- *p = 200;
- printf("i的值為:%d\n", i);
- changeByValue(i);
- printf("通過值傳遞修改i的值:%d\n", i);
- changeByAddress(&i); // int *p = &i;
- printf("通過傳位址修改i的值:%d\n",i);
- system("pause");
- }
程式運作結果如圖:
傳值和傳位址
由程式的運作結果也可以看出,值傳遞無法修改實參的值,傳位址可以修改實參的值。