資料類型:
八進制數:一般以0開頭;
十六進制數:以0x開頭;
字元資料:單字元以char 定義,每個字母對應有ASCII碼,小寫字母比大寫字母大32,A的ASCII碼為65,字元的比較也是通過ascii的值來比較的;
i+++j是i(++)+j,但是這是很不規範的做法。
輸入輸出
%d 整數 %ld長整型
%x 十六進制 %u無符号數
%f 浮點數 %o八進制
%c 字元 %e指數形式
%s 字元串
占n列取m位小數 %n.mf
scanf一般加&,遇到已經是位址的不加,比如指針,數組。
比如:
char str[];
scanf("%s",str);//以空格判斷輸入結束
printf不加&;
邏輯控制
邏輯表達式自左向右求解(如果沒有括号的話);
do while 和while的使用關鍵是看while條件的初值是否是1,do while、while和for可以通用,for循環可以實作一切循環。for(t1;t2;t3)先執行t1,判斷t2是否滿足;是則執行内容否則退出;内容執行完後執行t3,再判斷t2……。
go to一般不适用。
數組
**一維數組定義:**
char a[10]="asds";
char a[10]={"asds"};
char a[10]={'a','s','d','s'};
這三者的定義是一樣的,在他們後面加上\0也還是一樣,編譯器會自動在後面加上\0。但是\0沒有占字元位置!
上述這個字元數組a,可以存放的字元數是10個不是9個。
strlen(a)=4; 實際的字元數
sizeof(a)=10;數組總共可以容納的字元數
定義全0
int a[10]={0};
**二維數組的定義:**
int a[3][3]={{1,2,3},{2,3,4},{3,4,5}};
int a[3][3]={1,2,3,2,3,4,3,4,5};
int a[][3]={1,2,3,2,3,4,3,4,5};
這三個表達式一樣。
初始化原則,從左往右從上往下,少則補0.
字元串處理
puts(char*)輸出一個字元串;
gets(char*)輸入一個字元串;//以回車判斷輸入結束
strcat(char*,char*)将後一個字元串接到前一個的後面
strcpy(char*,char*)将後一個字元串指派到前一個字元串
strncpy(char*,char*,n)将後面一個字元串的前面n個字元複制到前一個字元串
strcmp(char*,char*)字元串比較函數
strlen(char*)傳回字元串的實際長度
strlwr(char*)将字元串大寫換小寫
strupr(char*)将字元串小寫換大寫
函數
被調函數在主調函數後需要聲明
在定義函數時定義的形參在未出現函數調用時是不占據記憶體空間的,隻有被調用了以後才被配置設定記憶體單元,調用結束後記憶體單元被釋放。
函數調用時,給形參配置設定存儲單元,并将實參對應的值傳遞給形參,調用結束後,形參單元被釋放,實參單元保留原值。
一維數組做函數參數形式為 str[],數組名做參數時,不是傳值,而是把首元素的位址傳遞給形參數組,即為兩個數組占據一個記憶體。
多元數組做函數參數形式為 str[][size],第一維的大小可以省略,但是第二維的不能省略。
**變量的存儲空間有:**
程式區、靜态存儲區、動态存儲區
全部變量是存放在靜态存儲區中的,程式中絕大部分變量都是在動态存儲區裡的。
**變量的存儲類别有:**
靜态存儲類、動态存儲類
具體有
auto:自動變量,絕大部分局部變量均為自動變量。
不賦初值時為一個不确定的值。
static:靜态變量聲明,是靜态存儲類别,靜态聲明不是指變量值無法改變,而是指變量值被儲存,不會被銷毀,直到程式運作結束才銷毀,比如局部函數中的靜态變量每一次運作都被儲存。
靜态局部變量不賦初值的話則預設為0或空字元。
外部函數仍然無法引用局部靜态變量。
register:變量存放在寄存器中,當變量多次使用的時候可以增加運作效率。
隻有局部自動變量和形式參數才可以作為寄存器變量。
數量有限,不能任意調用,對于不同的系統有不同的限制。
局部靜态變量不能聲明為寄存器變量。
extern:外部變量聲明,從函數定義處開始一直到檔案末尾。
可以在多個檔案中使用,在一個檔案中定義,其餘檔案中聲明。
比如: file1中為 int A;
file2中為extern A;