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