預(yù)編譯頭文件
#include <stdio.h>
// 預(yù)處理器指令, C 編譯器在編譯前要包含 stdio.h 文件
基本語法
C 程序由各種令牌組成,令牌可以是關(guān)鍵字、標(biāo)識(shí)符、常量、字符串值,或者是一個(gè)符號(hào).
數(shù)據(jù)類型
1.基本類型:整數(shù)類型和浮點(diǎn)類型
2.枚舉類型:算術(shù)類型,被用來定義在程序中只能賦予其一定的離散整數(shù)值的變量
3.void類型:類型說明符 void 表明沒有可用的值
4.派生類型:包括指針類型、數(shù)組類型、結(jié)構(gòu)類型、共用體類型、函數(shù)類型
運(yùn)算符:sizeof(int) //可獲取對象或類型的存儲(chǔ)字節(jié)大小
變量
char :通常是一個(gè)字節(jié),這是一個(gè)整數(shù)類型
int: 對機(jī)器而言,整數(shù)的最自然的大小
float:單精度浮點(diǎn)值。單精度是這樣的格式,1位符號(hào),8位指數(shù),23位小數(shù)
double:雙精度浮點(diǎn)值。雙精度是1位符號(hào),11位指數(shù),52位小數(shù)
void:表示類型缺失
C 中的變量定義
告訴編譯器在何處創(chuàng)建變量的存儲(chǔ),以及如何創(chuàng)建變量的存儲(chǔ)。變量定義指定一個(gè)數(shù)據(jù)類型
eg: int a;
常量
//整數(shù)常量
整數(shù)常量可以是十進(jìn)制、八進(jìn)制或十六進(jìn)制的常量
前綴指定基數(shù):0x 或 0X 表示十六進(jìn)制,0 表示八進(jìn)制,不帶前綴則默認(rèn)表示十進(jìn)制
后綴是 U 和 L 的組合,U 表示無符號(hào)整數(shù)(unsigned),L 表示長整數(shù)(long)
//浮點(diǎn)常量
浮點(diǎn)常量由整數(shù)部分、小數(shù)點(diǎn)、小數(shù)部分和指數(shù)部分組成
帶符號(hào)的指數(shù)是用 e 或 E 引入的
//字符常量
\r 回車
\n 換行
//定義常量
1.使用#define預(yù)處理器
2.使用 const 關(guān)鍵字
存儲(chǔ)類
auto 存儲(chǔ)類
//auto 存儲(chǔ)類是所有局部變量默認(rèn)的存儲(chǔ)類 類似于JS中的局部變量
register存儲(chǔ)類
//register 存儲(chǔ)類用于定義存儲(chǔ)在寄存器中而不是 RAM 中的局部變量。這意味著變量的最大尺寸等于寄存器的大?。ㄍǔJ且粋€(gè)詞),且不能對它應(yīng)用一元的 '&' 運(yùn)算符(因?yàn)樗鼪]有內(nèi)存位置)
static 存儲(chǔ)類
//static 修飾后,不會(huì)在每次調(diào)用時(shí)重置,必須得在同意文件中
extern 存儲(chǔ)類
//extern 全局變量對所有的程序文件都是可見的
運(yùn)算符
//1.算術(shù)運(yùn)算符
+ - * / % ++ --
//2.關(guān)系運(yùn)算符
== != > < <= >=
//3.邏輯運(yùn)算符
&& || !
// 4.位運(yùn)算符
&:都為1則為1
| :有一個(gè)是一則為1
^:兩個(gè)位數(shù)同為1則為1
~:反碼
<<:左移運(yùn)算符
>>:右移運(yùn)算符
//5.賦值運(yùn)算符
= += -= *= /= %= <<= >>= &= ^= |=
//6.雜項(xiàng)運(yùn)算符 ? sizeof & 三元
sizeof() 返回變量的大小
& 返回變量地址
*指向一個(gè)變量
? : 三元運(yùn)算(條件表達(dá)式)
判斷
//與JS基本相同
if else
switch case
三元
循環(huán)
//與JS基本相同
for
while
do ... while
//循環(huán)控制語句
break 結(jié)束循環(huán)
continue 結(jié)束本輪循環(huán),開始下次迭代
goto 控制轉(zhuǎn)移至標(biāo)記語句
函數(shù)
strcat() 用來連接兩個(gè)字符串
memcpy() 用來復(fù)制內(nèi)存到另一個(gè)位置
函數(shù)包含:名稱 函數(shù)體 參數(shù) 返回類型 后兩者不是必須得
函數(shù)聲明中,參數(shù)的名稱并不重要,只有參數(shù)的類型是必需的
int max(int, int);
當(dāng)程序調(diào)用函數(shù)時(shí),程序控制權(quán)會(huì)轉(zhuǎn)移給被調(diào)用的函數(shù)。被調(diào)用的函數(shù)執(zhí)行已定義的任務(wù),當(dāng)函數(shù)的返回語句被執(zhí)行時(shí),或到達(dá)函數(shù)的結(jié)束括號(hào)時(shí),會(huì)把程序控制權(quán)交還給主程序
作用域規(guī)則
全局 局部 形參 與JS相同 全局參數(shù)同名時(shí)有優(yōu)先選擇形參
//全局變量與局部變量在內(nèi)存中的區(qū)別
全局變量保存在內(nèi)存的全局存儲(chǔ)區(qū)中,占用靜態(tài)的存儲(chǔ)單元;
局部變量保存在棧中,只有在所在函數(shù)被調(diào)用時(shí)才動(dòng)態(tài)地為變量分配存儲(chǔ)單元。
數(shù)組
#C數(shù)組都是由連續(xù)的內(nèi)存位置組成。最低的地址對應(yīng)第一個(gè)元素,最高的地址對應(yīng)最后一個(gè)元素
聲明數(shù)組、數(shù)組賦值、訪問數(shù)組
enum(枚舉)
//基本數(shù)據(jù)類型
可以在定義枚舉類型時(shí)改變枚舉元素的值:enum season {spring, summer=3, autumn, winter};
C 指針
//什么是指針?
指針是一個(gè)變量,其值為另一個(gè)變量的地址,即,內(nèi)存位置的直接地址
&獲取指針地址,*指針訪問值
//NULL 指針
一個(gè)空的
函數(shù)指針與回調(diào)函數(shù)
#include <stdio.h>
int max(int x, int y)
{
return x > y ? x : y;
}
int main(void)
{
/* p 是函數(shù)指針 */
int (* p)(int, int) = & max; // &可以省略
int a, b, c, d;
printf("請輸入三個(gè)數(shù)字:");
scanf("%d %d %d", & a, & b, & c);
/* 與直接調(diào)用函數(shù)等價(jià),d = max(max(a, b), c) */
d = p(p(a, b), c);
printf("最大的數(shù)字是: %d\n", d);
return 0;
}
回調(diào)函數(shù)基本與JS一樣!
字符串
在 C 語言中,字符串實(shí)際上是使用 null 字符 '\0' 終止的一維字符數(shù)組
strcpy(s1,s2) 復(fù)制2至1
strcat(s1,s2)連接至尾端
strlen(s) 返回字符串長度
strcmp(s1,s2)兩者相同返回0,s1<s2返回小于0, s1>s2 返回大于 0
strchr(s1, ch)返回一個(gè)指針,指向字符串 s1 中字符 ch 的第一次出現(xiàn)的位置
strstr(s1, s2);返回一個(gè)指針,指向字符串 s1 中字符串 s2 的第一次出現(xiàn)的位置。
結(jié)構(gòu)體
//為了定義結(jié)構(gòu),您必須使用 struct 語句。struct 語句定義了一個(gè)包含多個(gè)成員的新的數(shù)據(jù)類型
位域
//有些信息在存儲(chǔ)時(shí),并不需要占用一個(gè)完整的字節(jié),而只需占幾個(gè)或一個(gè)二進(jìn)制位。例如在存放一個(gè)開關(guān)量時(shí),
//只有 0 和 1 兩種狀態(tài),用 1 位二進(jìn)位即可。為了節(jié)省存儲(chǔ)空間,并使處理簡便,C 語言又提供了一種數(shù)據(jù)結(jié)構(gòu),
//稱為"位域"或"位段"。
輸入 & 輸出
printf() 輸入
scanf()輸出
getchar() 屏幕讀取下一個(gè)可用的字符并返回
putchar() 字符輸出到屏幕上,并返回相同的字符
C 文件讀寫
//打開文件
fopen( )
FILE *fopen( const char * 文件名, const char * 模式);
r //打開一個(gè)已有的文本文件,允許讀取文件
a //打開一個(gè)文本文件,以追加模式寫入文件。如果文件不存在,則會(huì)創(chuàng)建一個(gè)新文件。在這里,您的程序會(huì)在已有的文件內(nèi)容中追加內(nèi)容。
w//打開一個(gè)文本文件,允許寫入文件。如果文件不存在,則會(huì)創(chuàng)建一個(gè)新文件。在這里,您的程序會(huì)從文件的開頭寫入內(nèi)容。如果文件存在,則該會(huì)被截?cái)酁榱汩L度,重新寫入
+r +a +w
//二進(jìn)制文件
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
//關(guān)閉文件
int fclose( FILE *fp );
//如果成功關(guān)閉文件,fclose( ) 函數(shù)返回零,如果關(guān)閉文件時(shí)發(fā)生錯(cuò)誤,函數(shù)返回 EOF
//EOF 是一個(gè)定義在頭文件 stdio.h 中的常量
//寫入文件
int fputc( int c, FILE *fp );
//函數(shù) fputc() 把參數(shù) c 的字符值寫入到 fp 所指向的輸出流中。如果寫入成功,它會(huì)返回寫入的字符,如果發(fā)生錯(cuò)誤,則會(huì)返回 EOF。
真J兒煩,放棄了!考試能過就行