Primary:C(一、入門)

預(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兒煩,放棄了!考試能過就行

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容