【從零開始學C語言】知識總結一:C語言的基本知識匯總
C語言是一種計算機程序設計語言。它既有高級語言的特點,又具有匯編語言的特點。它可以作 為系統(tǒng)設計語言,編寫工作系統(tǒng)應用程序,也可以作為應用程序設計語言,編寫不依賴計算機 硬件的應用程序。
事實上,C語言是一個很小的內核語言,只包括極少的與硬件有關的部分,C語言不直接提供輸入輸出語句,有關文件都是要文件操作的語句和動態(tài)內存管理等操作都是要使用到系統(tǒng)提供的庫函數來實現的,可以說C語言就是一種結構化程序語言,這是一種分的思想, 以Hello World程序為例,可以建立兩個函數,一個輸出Hello,一個輸出World。

2、C語言的數據類型列表:(后邊再詳解)
整型、浮點型(實數型)、單字符型、字符串型、數組類型、指針類型、結構體類型、共用體類型
3、C語言的控制語句列表:(后邊再詳解)
跳轉型:goto語句、break語句、continue語句、return語句
判斷型:if-else語句
循環(huán)型:do-while語句、while語句、for語句
選擇語句:switch-case語句
4、最簡單的C程序:
1 )、一個程序由一個或者多個源程序文件組成,一個源程序中只有一個mai函數(主函數)
2)、預處理指令:
1、 如#include<stdio.h>,(還有其他的指令,用到再講)C編譯環(huán)境在對源程序進行“翻譯”之前,都會先去做一個事情,先由一個預處理器,對預處理指令進行處理,對于<stdio.h>指令來說,就是在使用標準函數庫中的輸入輸出函數時,編譯系統(tǒng)要求程序提供有關的信息,#include 叫做文件包含命令 它的作用就是用來提供這些信息的,用來引入對應的頭文件(.h文件),這樣才能調用庫函數。
2、#include 的處理過程很簡單,就是將頭文件的內容插入到該命令所在的位置,從而把頭文件和當前源文件連接成一個源文件,這與復制粘貼的效果相同。
3、使用尖括號< >和雙引號" "的區(qū)別在于頭文件的搜索路徑不同:
使用尖括號< >,編譯器會到系統(tǒng)路徑下查找頭文件;
而使用雙引號" ",編譯器首先在當前目錄下查找頭文件,如果沒有找到,再到系統(tǒng)路徑下查找。
5、全局變量和局部變量:
#include<stdio.h>inta=3;//這是全局變量? a在整個程序中都可以起作用voidf(intn);//里邊的n就是形式參數intmain(void){intn;//在這里定義一個n和形式參數的n互不影響intb=50;//這是局部變量? ? b出了main函數它就沒有作用了 inta=2;// 在這里定義一個a和外邊那個a沒有聯(lián)系if(a>b){//這種就是復合語句 (包括其他循環(huán)、選擇語句) inta=1;// 在再這里定義一個a和外邊那些a沒有聯(lián)系? 但是//根據變量的特點? 如果相同變量名稱的時候 //復合語句的變量會覆蓋外邊main函數的a,main函數的a會覆蓋外? ? ? ? ? ? ? ? ? ? // 邊全局變量的a? //(小覆蓋大)}}voidf(intn){intn;//這里定義一個n也和形式參數的n沒有任何聯(lián)系}復制代碼
1、局部變量? 只能在聲明的函數內部使用,離開了聲明的函數,就不能使用該變量了。不同的函數可以使用相同名字的變量,它們代表不同的對象,互不影響,形式參數也是局部變量,在一個函數的內部也可以在復合語句中定義變量,這些變量中也只是在本復合語句中有效。復合語句稱為分程序,或程序塊。
2、全局變量不僅可以在main函數中,而且可以在別的函數中使用,也就是說全局變量是可以在程序中的任意地方使用。它可以增加函數之間數據的聯(lián)系,它在程序的全部執(zhí)行過程中都會占用存儲單元,是函數的通用性??偨Y來就是說兩者作用域不一樣
6、C函數的定義:
一個C程序是由一個或者多個函數組成的,但是其中必定要有且只有一個main函數,程序開始也是從main函數開始的。
一個函數包含兩部分:1)函數首部,函數的第一行:函數類型、函數名,(函數參數類型,函數參數名稱),其是(形式參數),形式參數可以是void ,也可什么都沒有。2)函數體,表示函數花括號下的程序,一般都有:聲明部分,一般在使用一個變量之前,必須進行對其聲明定義類型(數據類型),在每行數據聲明或者C語句后必須有一個分號表示結束。
7、說明:
C語言本身不提供輸入輸出語句,輸入輸出的操作都是要調用系統(tǒng)庫函數scanf和printf等函數來實現的,而此函數是在<stdio.h>,文件里面,所以在開頭必須先預處理此頭文件。
而形參和實參:當我們調用函數時,對其傳入的參數和函數體內接收到的參數其實并不是同一個變量。調用函數時向函數傳入的參數稱作實際參數,簡稱實參,而函數體內部用于接收外部調用時傳入的參數的參數稱為形式參數,簡稱形參。
8、C程序運行步驟:
編程—>編譯—>鏈接
1、編程:在編譯環(huán)境中書寫程序,編寫好了之后,系統(tǒng)會將此源程序,以.c為后綴的文件形式存放在指定的文件夾中,如 f.c文件
2、編譯:編譯環(huán)境會對源程序進行語法檢查,如有發(fā)出錯誤信息提醒編程人員修改,直到沒有語法錯誤,編譯程序自動將源程序轉換為二進制形式的目標文件? 是以后綴.obj文件保存。
3、 鏈接:經過編譯所得到的二進制目標文件,還不能別計算機直接執(zhí)行,它們還只是零散的一個個部件,必須由鏈接程序將編譯后的目標文件和函數庫還有其他生成的文件組成起來,生成一個計算機能執(zhí)行的可執(zhí)行文件。后綴名為.exe文件
9、C變量存儲方式與生存期:
1、在c語言中,變量的作用域 可以分為全局變量和局部變量,而從另一個角度說,變量的儲存有兩種不同的方式,靜態(tài)儲存方式和動態(tài)儲存方式。靜態(tài)指的是程序運行期間? 由系統(tǒng)分配固定的空間給程序,而動態(tài)? 則是程序運行期間 需要根據情況進行動態(tài)分配儲存空間的方式
2、內存中使用儲存空間的情況,可以分為以下三種:
(1)程序區(qū)
(2)靜態(tài)儲存區(qū),存放全局變量 負責給程序運行時分配內存區(qū)? 在靜態(tài)數據區(qū),內存中所有的字節(jié)默認值都是0x00
(3)動態(tài)儲存區(qū),它存放以下數據:
1、函數形式參數,在調用函數時給形參分配儲存空間
2、函數中的自動變量
3、函數調用時的現場保護和返回地址等
4、對變量的儲存類型有四種,分別是:auto (自動變量)、static (靜態(tài)變量)、register( 寄存器變量)、 extern(外部變量)
對以上這些數據,在函數開始調用時分配動態(tài)存儲空間,函數結束時釋放這些空間。在 c 語言中,每個變量和函數有兩個屬性:數據類型和數據的存儲類別。
1- auto? (自動變量)
在程序的函數中的局部變量,如果不專門聲明為靜態(tài)(static)存儲方式,都是自動分配動態(tài)的地址存儲空間。包括復合語句和函數的形參 都是的,自動變量用關鍵字 auto 為聲明。重點是這些變量在函數調用完畢后它們都會被系統(tǒng)給釋放回收內存
2- static 靜態(tài)變量(局部變量)
有時候,我們希望自己的局部變量不被函數調用完畢后消失,而繼續(xù)保持原值,其占用的儲存單元不是釋放,用關鍵字 static 進行聲明 這類變量叫靜態(tài)變量。它和全局變量相同的是,在函數調用結束后,它并不釋放內存,保留其當前值,而且在整個程序運行時,都不釋放內存。不同的是。它本質還是局部變量,在其他函數中也不能使用它,而且,它只能進行第一次賦值,在整個程序運行時,它只會保留上一次函數調用結束時的值。
一個被聲明為靜態(tài)的全局變量可以被模塊內(源程序)所用函數訪問,但不能被其他模塊外(源程序)其他函數訪問,它是一個本地的全局變量
一個被聲明為靜態(tài)的函數只可被這一源程序的其他函數調用.那就是,這個函數被限制在聲明它的模塊本地范圍內使用
全局變量(外部變量)的說明再冠以static
就構成了靜態(tài)的全局變量。當一個源程序由多個源文件組成時,非靜態(tài)的全局變量在各個源文件中都是有效的。 而靜態(tài)全局變量則限制了其作用域, 即只在定義該變量的源文件內有效, 在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個源文件內,只能為該源文件內的函數公用,因此可以避免在其它源文件中引起錯誤。
把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范圍(只能在本地)
static函數與普通函數作用域不同,僅能在本源文件內使用此函數。
3- register( 寄存器變量)
在程序運行時,如果一個變量,被頻繁使用,那么系統(tǒng)就必須多次訪問內存中的單元,會影響程序執(zhí)行效率,因此為了提高效率,就產生了寄存器變量,它可以直接將局部變量的值存放到CPU的寄存器中,需要時,直接從寄存器中取出參數運算,不必經過內存中取存儲,由于受硬件寄存器長度的限制,所以寄存器變量只能是char、int或指針型。寄存器說明符只能用于說明函數中的變量和函數中的形參,因此不允許將外部變量或靜態(tài)變量說明為"register"。由于寄存器的存取速度遠高于對內存的存取速度,所以這樣可以提升執(zhí)行效率。
4- extern (外部變量)
一般來說外部變量是函數的外面定義的全局變量
如果沒有在頭文件中定義有外部變量(文件的知識)
那如果在一個程序中如果需要在一個源文件內擴展到另一個源文件的作用域的全局變量,就可以在定義函數時引用extern關鍵字將該變量轉為“外部的變量”,表示將此變量的作用域擴展到此位置,有了此聲明,就可以在其他源文件中使用此變量了。
將全局變量的作用域擴展到其他文件,可以先在一個文件中定義一個變量,然后再在其他文件中用extern定義相同名字的變量,就可以將作用域擴展到整個程序的結束了。
*注? 如果在文件1中的全局變量加了static那么這個變量就會被限制在此文件中了,在文件2中使用extern也訪問不到文件1的全局變量了
在一個函數聲明前加extern 此函數就會可擴展作用域,可以在其他文件中使用此函數。
END
文章來源:稀土掘金:Mr_Li_

對啦對啦!另外的話為了幫助大家,輕松,高效學習C語言/C++,我給大家分享我收集的資源,從最零基礎開始的教程到C語言項目案例,幫助大家在學習C語言的道路上披荊斬棘!可以來我粉絲群領取哦~
微信公眾號:C語言編程學習基地
整理分享(多年學習的源碼、項目實戰(zhàn)視頻、項目筆記,基礎入門教程)最重要的是你可以在群里面交流提問編程問題哦!
掃描進來哦~
