Time of Update: 2017-02-27
本章小結1. 指標是C語言中一個重要的組成部分,使用指標編程有以下優點:(1)提高程式的編譯效率和執行速度。(2)通過指標可使用主調函數和被調函數之間共用變數或資料結構,便於實現雙向資料通訊。(3)可以實現動態儲存分配。(4)便於表示各種資料結構,編寫高品質的程式。2.
Time of Update: 2017-02-27
main函數的參數前面介紹的main函數都是不帶參數的。因此main 後的括弧都是空括弧。實際上,main函數可以帶參數,這個參數可以認為是 main函數的形式參數。C語言規定main函數的參數只能有兩個, 習慣上這兩個參數寫為argc和argv。因此,main函數的函數頭可寫為: main (argc,argv)C語言還規定argc(第一個形參)必須是整型變數,argv( 第二個形參)必須是指向字串的指標數組。加上形參說明後,main函數的函數頭應寫為: main
Time of Update: 2017-02-27
指標數組說明的一般形式為: 類型說明符*數組名[數組長度] 其中類型說明符為指標值所指向的變數的類型。例如: int *pa[3] 表示pa是一個指標數組,它有三個數組元素, 每個元素值都是一個指標,指向整型變數。通常可用一個指標數組來指向一個二維數組。 指標數組中的每個元素被賦予二維數組每一行的首地址, 因此也可理解為指向一個一維數組。圖6—6表示了這種關係。int a[3][3]={1,2,3,4,5,6,7,8,9};int
Time of Update: 2017-02-27
使用字串指標變數與字元數組的區別用字元數組和字元指標變數都可實現字串的儲存和運算。 但是兩者是有區別的。在使用時應注意以下幾個問題:1. 字串指標變數本身是一個變數,用於存放字串的首地址。而字串本身是存放在以該首地址為首的一塊連續的記憶體空間中並以‘\0’作為串的結束。字元數組是由於若干個數組元素組成的,它可用來存放整個字串。2. 對字元數組作初始化賦值,必須採用外部類型或靜態類型,如: static char st[]={“C Language”
Time of Update: 2017-02-27
二、多維陣列的指標變數 把二維數組a 分解為一維數組a[0],a[1],a[2]之後,設p為指向二維數組的指標變數。可定義為: int (*p)[4] 它表示p是一個指標變數,它指向二維數組a 或指向第一個一維數組a[0],其值等於a,a[0],或&a[0][0]等。而p+i則指向一維數組a[i]。從前面的分析可得出*(p+i)+j是二維數組i行j 列的元素的地址,而*(*(p+i)+j)則是i行j列元素的值。二維數組指標變數說明的一般形式為: 類型說明符 (*指標變數名)[長度]
Time of Update: 2017-02-27
數組指標變數的說明和使用指向數組的指標變數稱為數組指標變數。 在討論數組指標變數的說明和使用之前,我們先明確幾個關係。一個數組是由連續的一塊記憶體單元組成的。 數組名就是這塊連續記憶體單元的首地址。一個數組也是由各個數組元素(下標變數) 組成的。每個數組元素按其類型不同佔有幾個連續的記憶體單元。 一個數組元素的首地址也是指它所佔有的幾個記憶體單元的首地址。 一個指標變數既可以指向一個數組,也可以指向一個數組元素,
Time of Update: 2017-02-27
2.指標變數的運算(1)賦值運算指標變數的賦值運算有以下幾種形式:①指標變數初始化賦值,前面已作介紹。②把一個變數的地址賦予指向相同資料類型的指標變數。例如:int a,*pa;pa=&a; /*把整型變數a的地址賦予整型指標變數pa*/③把一個指標變數的值賦予指向相同類型變數的另一個指標變數。如:int a,*pa=&a,*pb;pb=pa;
Time of Update: 2017-02-27
指標簡介指標是C語言中廣泛使用的一種資料類型。 運用指標編程是C語言最主要的風格之一。利用指標變數可以表示各種資料結構; 能很方便地使用數組和字串; 並能象組合語言一樣處理記憶體位址,從而編出精練而高效的程式。指標極大地豐富了C語言的功能。 學習指標是學習C語言中最重要的一環, 能否正確理解和使用指標是我們是否掌握C語言的一個標誌。同時, 指標也是C語言中最為困難的一部分,在學習中除了要正確理解基本概念,還必須要多編程,上機調試。只要作到這些,指標也是不難掌握的。指標的基本概念
Time of Update: 2017-02-27
內建函式和外部函數函數一旦定義後就可被其它函數調用。 但當一個來源程式由多個源檔案組成時, 在一個源檔案中定義的函數能否被其它源檔案中的函數調用呢?為此,C語言又把函數分為兩類:一、內建函式如果在一個源檔案中定義的函數只能被本檔案中的函數調用,而不能被同一來源程式其它檔案中的函數調用, 這種函數稱為內部函 數。定義內建函式的一般形式是: static 類型說明符 函數名(形參表) 例如:static int f(int a,int b) 內建函式也稱為靜態函數。但此處靜態static
Time of Update: 2017-02-27
三、靜態變數靜態變數的類型說明符是static。 靜態變數當然是屬於靜態儲存方式,但是屬於靜態儲存方式的量不一定就是靜態變數, 例如外部變數雖屬於靜態儲存方式,但不一定是靜態變數,必須由 static加以定義後才能成為靜態外部變數,或稱靜態全域變數。 對於自動變數,前面已經介紹它屬於動態儲存裝置方式。 但是也可以用static定義它為靜態自動變數,或稱靜態局部變數,從而成為靜態儲存方式。由此看來, 一個變數可由static進行再說明,並改變其原有的儲存方式。1.
Time of Update: 2017-02-27
變數的儲存方式可分為“靜態儲存”和“動態儲存裝置”兩種。 靜態儲存變數通常是在變數定義時就分定儲存單元並一直保持不變, 直至整個程式結束。5.5.1節中介紹的全域變數即屬於此類儲存方式。動態儲存裝置變數是在程式執行過程中,使用它時才分配儲存單元, 使用完畢立即釋放。 典型的例子是函數的形式參數,在函數定義時並不給形參分配儲存單元,只是在函數被調用時,才予以分配, 調用函數完畢立即釋放。如果一個函數被多次調用,則反覆地分配、 釋放形參變數的儲存單元。
Time of Update: 2017-02-27
一、局部變數局部變數也稱為內部變數。局部變數是在函數內作定義說明的。其範圍僅限於函數內, 離開該函數後再使用這種變數是非法的。例如:int f1(int a) /*函數f1*/{int b,c; ……}a,b,c範圍int f2(int x) /*函數f2*/{int y,z; }x,y,z範圍main(){int m,n; }m,n範圍 在函數f1內定義了三個變數,a為形參,b,c為一般變數。在
Time of Update: 2017-02-27
函數的遞迴調用一個函數在它的函數體內調用它自身稱為遞迴調用。 這種函數稱為遞迴函式。C語言允許函數的遞迴調用。在遞迴調用中, 主調函數又是被調函數。執行遞迴函式將反覆調用其自身。 每調用一次就進入新的一層。例如有函數f如下:int f (int x){int y;z=f(y);return z;}這個函數是一個遞迴函式。 但是運行該函數將無休止地調用其自身,這當然是不正確的。為了防止遞迴調用無終止地進行, 必須在函數內有終止遞迴調用的手段。常用的辦法是加條件判斷,
Time of Update: 2017-02-27
函數的嵌套調用C語言中不允許作嵌套的函數定義。因此各函數之間是平行的,不存在上一級函數和下一級函數的問題。 但是C語言允許在一個函數的定義中出現對另一個函數的調用。 這樣就出現了函數的嵌套調用。即在被調函數中又調用其它函數。 這與其它語言的子程式嵌套的情形是類似的。其關係可表示如圖5.2。圖5.2表示了兩層嵌套的情形。其執行過程是:執行main函數中調用a函數的語句時,即轉去執行a函數,在a函數中調用b 函數時,又轉去執行b函數,b函數執行完畢返回a函數的斷點繼續執行,a
Time of Update: 2017-02-27
二、數組名作為函數參數用數組名作函數參數與用數組元素作實參有幾點不同:1. 用數組元素作實參時,只要數群組類型和函數的形參變數的類型一致,那麼作為下標變數的數組元素的類型也和函數形參變數的類型是一致的。因此, 並不要求函數的形參也是下標變數。 換句話說,對數組元素的處理是按普通變數對待的。用數組名作函數參數時, 則要求形參和相對應的實參都必須是類型相同的數組,都必須有明確的數組說明。當形參和實參二者不一致時,即會發生錯誤。2.
Time of Update: 2017-02-27
二、函數的值函數的值是指函數被調用之後, 執行函數體中的程式段所取得的並返回給主調函數的值。如調用正弦函數取得正弦值,調用例5.1的max函數取得的最大數等。對函數的值(或稱函數傳回值)有以下一些說明:1. 函數的值只能通過return語句返回主調函數。return 語句的一般形式為: return 運算式; 或者為:return (運算式);該語句的功能是計算運算式的值,並返回給主調函數。 在函數中允許有多個return語句,但每次調用只能有一個return 語句被執行,
Time of Update: 2017-02-27
函數定義的一般形式1.無參函數的一般形式 類型說明符 函數名() { 類型說明 語句 }其中類型說明符和函數名稱為函數頭。 類型說明符指明了本函數的類型,函數的類型實際上是函數傳回值的類型。 該類型說明符與第二章介紹的各種說明符相同。 函數名是由使用者定義的標識符,函數名後有一個空括弧,其中無參數,但括弧不可少。{} 中的內容稱為函數體。在函數體中也有類型說明, 這是對函數體內部所用到的變數的類型說明。在很多情況下都不要求無參函數有傳回值,
Time of Update: 2017-02-27
概述在第一章中已經介紹過,C來源程式是由函數組成的。 雖然在前面各章的程式中都只有一個主函數main(), 但公用程式往往由多個函數組成。函數是C來源程式的基本模組, 通過對函數模組的調用實現特定的功能。C語言中的函數相當於其它進階語言的子程式。 C語言不僅提供了極為豐富的庫函數(如Turbo C,MS C 都提供了三百多個庫函數),還允許使用者建立自己定義的函數。使用者可把自己的演算法編成一個個相對獨立的函數模組,然後用調用的方法來使用函數。可以說C程式的全部工作都是由各式各樣的函數完成的,
Time of Update: 2017-02-27
在二維數組a中選出各行最大的元素組成一個一維數組b。 a=3 16 87 65 4 32 11 108 10 25 12 37b=(87 108 37) 本題的編程思路是,在數組A的每一行中尋找最大的元素,找到之後把該值賦予數組B相應的元素即可。程式如下:main(){static int a[][4]={3,16,87,65,4,32,11,108,10,25,12,27};int b[3],i,j,l;for(i=0;i<=2;i++){ l=a[i][0];for(j=1;j<
Time of Update: 2017-02-27
程式舉例把一個整數按大小順序插入已排好序的數組中。 為了把一個數按大小插入已排好序的數組中, 應首先確定排序是從大到小還是從小到大進行的。設排序是從大到小進序的, 則可把欲插入的數與數組中各數逐個比較, 當找到第一個比插入數小的元素i時,該元素之前即為插入位置。然後從數組最後一個元素開始到該元素為止,逐個後移一個單元。最後把插入數賦予元素i即可。如果被插入數比所有的元素值都小則插入最後位置。main(){int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105