一篇文章帶你了解C語(yǔ)言:入門(mén)基礎(chǔ)
閑話(huà)少說(shuō),先上思維導(dǎo)圖。
如圖所示,現(xiàn)在還是初識(shí)C語(yǔ)言的第一部分,本次只介紹了C語(yǔ)言本身特點(diǎn),數(shù)據(jù)類(lèi)型,常量變量,字符串轉(zhuǎn)義字符注釋?zhuān)x擇循環(huán)語(yǔ)句,函數(shù),數(shù)組。
接下來(lái)請(qǐng)和我一起粗略地探討其中內(nèi)涵所在。
C語(yǔ)言本身特點(diǎn)
這是C語(yǔ)言的定義:
C語(yǔ)言是一門(mén)通用計(jì)算機(jī)編程語(yǔ)言,廣泛應(yīng)用于底層開(kāi)發(fā)。C語(yǔ)言的設(shè)計(jì)目標(biāo)是提供一種能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語(yǔ)言。
盡管C語(yǔ)言提供了許多低級(jí)處理的功能,但仍然保持著良好跨平臺(tái)的特性,以一個(gè)標(biāo)準(zhǔn)規(guī)格寫(xiě)出的C語(yǔ)言程序可在許多電腦平臺(tái)上進(jìn)行編譯,甚至包含一些嵌入式處理器(單片機(jī)或稱(chēng)MCU)以及超級(jí)電腦等作業(yè)平臺(tái)。
二十世紀(jì)八十年代,為了避免各開(kāi)發(fā)廠商用的C語(yǔ)言語(yǔ)法產(chǎn)生差異,由美國(guó)國(guó)家標(biāo)準(zhǔn)局為C語(yǔ)言制定了一套完整的美國(guó)國(guó)家標(biāo)準(zhǔn)語(yǔ)法,稱(chēng)為ANSI C,作為C語(yǔ)言最初的標(biāo)準(zhǔn)。 [1] 目前2011年12月8日,國(guó)際標(biāo)準(zhǔn)化組織(ISO)和國(guó)際電工委員會(huì)(IEC)發(fā)布的C11標(biāo)準(zhǔn)是C語(yǔ)言的第三個(gè)官方標(biāo)準(zhǔn),也是C語(yǔ)言的最新標(biāo)準(zhǔn),該標(biāo)準(zhǔn)更好的支持了漢字函數(shù)名和漢字標(biāo)識(shí)符,一定程度上實(shí)現(xiàn)了漢字編程。
C語(yǔ)言是一門(mén)面向過(guò)程的計(jì)算機(jī)編程語(yǔ)言,與C++,Java等面向?qū)ο蟮木幊陶Z(yǔ)言有所不同。
其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
但總結(jié)其特點(diǎn)就是
1.底層開(kāi)發(fā),
2.國(guó)際標(biāo)準(zhǔn) ANSI C,
3.面向過(guò)程
#include <stdio.h> //stdio-標(biāo)準(zhǔn)輸入輸出 standard input & output headfile //int -整型-整數(shù)的類(lèi)型 //主函數(shù) //main函數(shù)是程序的入口 //唯一性有且僅有一個(gè) int main() { //庫(kù)函數(shù)-打印函數(shù)-輸出函數(shù) printf("hello world!\n"); printf("hello world!\n"); printf("hello world!\n"); return 0; } //這種寫(xiě)法明確告訴你,main函數(shù)不需要傳參 int main(void) { } //這種寫(xiě)法有用,但不是重點(diǎn) int mian(int argc, char* argv[]) { }
數(shù)據(jù)類(lèi)型
C語(yǔ)言主要有六種數(shù)據(jù)類(lèi)型,分別為字符型char,短整型short,整形int,長(zhǎng)整型long,單精度浮點(diǎn)型float以及雙精度浮點(diǎn)型double。
這六種分別有自己的字符長(zhǎng)度即其所建變量所占的空間,char最小只要1個(gè)字節(jié),short占2個(gè),int占4個(gè),long一般是4個(gè),也有可能是8個(gè),反正只要滿(mǎn)足long的字節(jié)長(zhǎng)度大于等于int就可以了。兩個(gè)浮點(diǎn)型的最為特殊,分別是4和8,顯然雙精度的精度更高。
int main() { //如何計(jì)算一個(gè)類(lèi)型創(chuàng)建的變量所占空間的大小 //sizeof(); printf("%d\n", sizeof(char));//1個(gè)字節(jié) printf("%d\n", sizeof(short));//2個(gè)字節(jié) printf("%d\n", sizeof(int));//4個(gè)字節(jié) printf("%d\n", sizeof(long));//4個(gè)字節(jié) printf("%d\n", sizeof(long long));//8個(gè)字節(jié) printf("%d\n", sizeof(float));//4個(gè)字節(jié) printf("%d\n", sizeof(double));//8個(gè)字節(jié) return 0; }
常量變量
變量分類(lèi)
顯而易見(jiàn)的是,分為兩類(lèi)變量和常量講述。變量又分兩類(lèi),一是局部變量,二是全局變量。
顧名思義,局部變量是定義在一對(duì)大括號(hào)內(nèi)的,顯然我們平時(shí)在main函數(shù)里創(chuàng)建的都是局部變量,全局變量則為定義在大括號(hào)外面的變量。當(dāng)二者同名時(shí),局部變量?jī)?yōu)先,當(dāng)然,這種代碼誰(shuí)寫(xiě)誰(shuí)SB。
使用小建議
在程序中使用scanf函數(shù),若程序?yàn)閟canf("%d%d");%d%d之間不管有沒(méi)有空格,輸入變量時(shí)都要用空格隔開(kāi),若二者之間有逗號(hào)則逗號(hào)隔開(kāi)。
生命周期作用域
對(duì)這二者討論他們的作用域和生命周期的話(huà),全局變量的作用域?yàn)檎麄€(gè)工程文件,若想在其他.c文件中使用則需要extern聲明一下,生命周期呢,則是整個(gè)工程的生命周期,也就是main函數(shù)的生命周期。局部變量的作用域?yàn)槠涠x的大括號(hào){ }內(nèi),進(jìn)作用域生命開(kāi)始,出則結(jié)束。
//驗(yàn)證局部變量的作用域 int main() { int b = 100;//主函數(shù)任意位置 { int a = 10;//局部變量作用域:局部所在范圍 printf("a=%d\n", a); printf("b=%d\n", b); } //printf("a=%d\n", a); printf("b=%d\n", b); return 0; } //驗(yàn)證全局變量的作用域?yàn)檎麄€(gè)工程 int a = 200; void test() { printf("test:%d\n", a); } int main() { test(); printf("main:%d\n", a);//全局變量可以任意使用 return 0; } //全局變量在其他源文件的使用 //轉(zhuǎn)到test1.c文件查看 int g_val = 110; //驗(yàn)證局部變量的生命周期為進(jìn)作用域到出作用域 int main() { { int a = 100; printf("%d\n", a); } printf("%d\n", a);//出作用域即生命周期結(jié)束 return 0; } //全局變量的生命周期為整個(gè)工程即main函數(shù)生命周期 int main() { printf("%d\n", g_val); return 0; }
常量分類(lèi)及其特點(diǎn)
常量呢,大致分為四種,1字面常量,2const修飾的常變量,3#define定義的標(biāo)識(shí)符常量,4枚舉常量。
第一種,字面常量就是隨便寫(xiě)出來(lái)的一個(gè)數(shù),如3.14就是一個(gè)字面常量。
第二種,const修飾的常變量,即在創(chuàng)建變量時(shí)加上const修飾,如const int a=0;這樣變量a就具有了常屬性,不可被修改。但值得注意的是,常變量一詞,它仍然是個(gè)變量,不可用于定義數(shù)組。
//const修飾的變量 int main() { //局部變量 int a = 200; //不可被改變的屬性,常屬性 const int a = 110; a = 100; printf("%d\n", a); //const修飾的變量不可定義數(shù)組 //(常變量) int n = 110; int arr[n] = { 0 };//數(shù)組 return 0; }
第三種,#define定義的常量,寫(xiě)法如 #define N 10,這是真真正正的常量,可以用來(lái)定義數(shù)組。同樣也是不可修改的(常量當(dāng)然不可被修改)。
#define PAI 314 int main() { int a = PAI; printf("a=%d\n", a); //MAX = 300;//#define定義的變量不可被修改 //可用于定義數(shù)組 int arr[PAI] = { 0 }; return 0; }
第四種,枚舉常量,具體使用方法像enum sex {MALE,F(xiàn)EMALE,SECRET};這樣就得到了枚舉常量,各自都是有初值的,分別為0,1,2依次類(lèi)推,當(dāng)然也可以自己賦值。
//枚舉常量 SEX性別舉例 //可以一一列舉的值,性別,三原色 enum Sex { //枚舉的可能取值 MALE=3,//賦初值 FEMALE=8, SECRET//向后延一個(gè)為9 }; int main() { //FEMALE = 99;//ERR 枚舉變量值不可修改 enum Sex a=MALE; enum Sex s = FEMALE; printf("%d\n", MALE); printf("%d\n", FEMALE); printf("%d\n", SECRET); return 0; }
字符串+轉(zhuǎn)義字符+注釋
字符串
被單引號(hào)引起來(lái)的,如'w','r'是字符,被雙引號(hào)引起來(lái)的"yyx","abcdef"是字符串。字符串一般以'\0'結(jié)尾隱含在字符串的末尾。既然'\0'為字符串結(jié)束標(biāo)志,在計(jì)算字符串長(zhǎng)度時(shí)當(dāng)然不算作字符串內(nèi)容。
//字符,字符串 int main() { //'a', ' ' , 'X' - 字符 //"abc" "123" - 字符串 //"abcdef"; //字符串字面值 //① char ch1[] = "abcdef";//初始化字符數(shù)組 //a ,b ,c ,d ,e ,f ,\0 //%s - 打印字符串 //strlen - 打印字符串長(zhǎng)度,(遇\0則停止,本身不算)\0是字符串結(jié)束標(biāo)志 printf("%s\n", ch1); //abcdef printf("%d\n", strlen(ch1));//6 //② char ch2[] = { 'a','b','c','d','e','f' }; //a ,b ,c ,e ,f printf("%s\n", ch2); //abcdef燙燙燙燙燙abcdef printf("%d\n", strlen(ch2));//22,找不到\0 //③ char ch3[] = { 'a','b','c','d','e','f','\0' }; //a ,b ,c ,d ,e ,f ,\0 printf("%s\n", ch3); //abcdef printf("%d\n", strlen(ch3));//6 return 0; }
轉(zhuǎn)義字符
有防止單引號(hào),雙引號(hào),反斜杠被轉(zhuǎn)移的' \' ' , ' \" ',' \\ ' 。警告,蜂鳴的' \a ' ,退格符' \b ',進(jìn)紙符' \f ',換行符' \n ',回車(chē)符' \r ',水平制表符' \t ',垂直制表位' \v ',八進(jìn)制數(shù)字' \ddd ',十六進(jìn)制數(shù)字' \xdd ' 。
#include <stdio.h> int main() { printf("c:\code\test.c\n");//c:code est.c printf("c:\\code\test.c\n");//c:\code est.c //單個(gè)\是轉(zhuǎn)義序列符,但這里又沒(méi)有\(zhòng)c的轉(zhuǎn)義字符,所以系統(tǒng)自動(dòng)忽略該\ //想要出現(xiàn)該\,則必須要搭配兩個(gè)\\,防止其被轉(zhuǎn)義 return 0; } // \? //三字母詞 // ??) --> ] ??( --> [ //\' \" int main() { printf("%c\n", 'a'); printf("%c\n", 'b'); printf("%c\n",'\'');//在'前面加上\,以單純的將其視為字符' printf("%s\n", "\"");// \" return 0; } //\a \b \f \v \t \n \r //\ddd八進(jìn)制數(shù)字 \xdd十六進(jìn)制數(shù)字 int main() { printf("%c\n", '\165'); //打印八進(jìn)制數(shù)字065轉(zhuǎn)化為十進(jìn)制數(shù)字53所代表的字符(ASCII碼) printf("%d\n", '\165'); //打印八進(jìn)制數(shù)字065轉(zhuǎn)化為十進(jìn)制數(shù)字53 printf("%c\n", '\x15'); printf("%d\n", '\x15');//21 return 0; }
兩種注釋
C++的風(fēng)格 //xxxxx ,這種只能注釋一行。C語(yǔ)言的風(fēng)格 /*xxxxx*/ ,不可嵌套注釋。
選擇循環(huán)語(yǔ)句
選擇語(yǔ)句,實(shí)現(xiàn)分支。具體情況為 if ( 條件 ) { 語(yǔ)句 } else ( 條件 ) { 語(yǔ)句 };循環(huán)語(yǔ)句,有while循環(huán),do...while循環(huán)和for循環(huán)。
int main() { int i = 0; printf("加入比特\n"); printf("要好好敲代碼嗎(1/0)?\n"); scanf("%d", &i); if (i == 1) { printf("好offer\n"); } else { printf("藥丸\n"); } return 0; } int main() { int line = 0; printf("加入比特\n"); while (line<20000) { printf("敲%d了代碼\n",line); line++; } printf("牛逼壞了拿到了好offer\n"); return 0; }
函數(shù)
函數(shù)主要傳參和返回值的類(lèi)型要對(duì)應(yīng)
int ADD(int num1, int num2) { scanf("%d %d", &num1, &num2); int sum = num1 + num2; return sum; } int main() { int num1 = 0; int num2 = 0; 輸入 //scanf("%d %d", &num1, &num2); 相加 //int sum = num1+num2; 輸出 //printf("sum=%d\n", sum); //int output = ADD(num1,num2); //printf("%d\n", output); printf("%d\n", ADD(num1, num2)); return 0; }
數(shù)組
定義是一組相同類(lèi)型的元素組成的集合,數(shù)組的使用是根據(jù)下標(biāo)來(lái)的,從0開(kāi)始數(shù)。
int main() { //數(shù)組 - 相同元素的集合 int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int i = 0; for (i = 0; i < 10; i++) { printf("%3d", arr[i]); } printf("\n"); for (i = 9; i >= 1; i--) { printf("%3d", arr[i]); } return 0; }
總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C++ clock()解析如何使用時(shí)鐘計(jì)時(shí)的應(yīng)用
本篇文章是對(duì)c++中的clock()函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06C/C++實(shí)現(xiàn)FTP文件上傳下載的示例詳解
FTP(文件傳輸協(xié)議)是一種用于在網(wǎng)絡(luò)上傳輸文件的標(biāo)準(zhǔn)協(xié)議,這篇文章主要為大家詳細(xì)介紹了C++如何實(shí)現(xiàn)FTP文件上傳下載功能,需要的小伙伴可以參考下2023-12-12C語(yǔ)言指針基礎(chǔ)知識(shí)實(shí)例講解
這篇文章主要介紹了C語(yǔ)言指針基本知識(shí)實(shí)例講解,文中實(shí)例講解的很清晰,有不太懂的同學(xué)可以研究下2021-02-02Qt?自定義屬性Q_PROPERTY不顯示float類(lèi)型的解決
這篇文章主要介紹了Qt?自定義屬性Q_PROPERTY不顯示float類(lèi)型的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11C語(yǔ)言單鏈表實(shí)現(xiàn)多項(xiàng)式相加
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言單鏈表實(shí)現(xiàn)多項(xiàng)式相加,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10C語(yǔ)言數(shù)組應(yīng)用實(shí)現(xiàn)三子棋游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言數(shù)組應(yīng)用實(shí)現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06C++入門(mén)到精通之循環(huán)語(yǔ)句的使用教程
這篇文章主要給大家介紹了關(guān)于C++中循環(huán)語(yǔ)句的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05C語(yǔ)言?使用qsort函數(shù)來(lái)進(jìn)行快速排序
排序方法有很多種:選擇排序,冒泡排序,歸并排序,快速排序等。?看名字都知道快速排序是目前公認(rèn)的一種比較好的排序算法。因?yàn)樗俣群芸?,所以系統(tǒng)也在庫(kù)里實(shí)現(xiàn)這個(gè)算法,便于我們的使用。?這就是qsort函數(shù)2022-02-02