




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座第二章第二章 C語言復(fù)習(xí)及語言復(fù)習(xí)及C+基礎(chǔ)知識(shí)基礎(chǔ)知識(shí)C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.1.1 C+的起源的起源2.1.2 C+的特點(diǎn)的特點(diǎn) *.c C的源程序的源程序 以下的文件以下的文件C和和C+都可用:都可用: *.h C的頭包含文件的頭包含文件 *.cpp C+的源程序的源程序 *.hpp C+的頭包含文件的頭包含文件 /* */ C的注釋的注釋 / C +的注釋的注釋2.1 C+的起源和特點(diǎn)的起源和特點(diǎn)1C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.2 C+源程序的構(gòu)成源程序的構(gòu)成2.2.1 C+程序的一般格式程序的一般格式例例2.1 說明說明C+構(gòu)造的示例程序構(gòu)造的示例程序
2、#include / 系統(tǒng)頭文件系統(tǒng)頭文件int add(int a, int b); /函數(shù)原型的說明函數(shù)原型的說明int main( ) /主函數(shù)主函數(shù) int x,y,sum; /定義三個(gè)整型變量定義三個(gè)整型變量 cout輸入二個(gè)數(shù)輸入二個(gè)數(shù):x; /從鍵盤輸入變量從鍵盤輸入變量x的值的值 ciny; /從鍵盤輸入變量從鍵盤輸入變量y的值的值 sum=add(x,y); /調(diào)用函數(shù)調(diào)用函數(shù)add,將函數(shù)返回值賦給變量將函數(shù)返回值賦給變量sum cout二數(shù)和是二數(shù)和是:sumn; /輸出輸出 return 0;int add(int a, int b) /定義函數(shù)定義函數(shù)add,函數(shù)函數(shù)
3、(返回返回)值為整型值為整型 int c; /定義臨時(shí)變量定義臨時(shí)變量c c=a+b; /求和求和 return c; /將將c的值返回的值返回,通過通過add帶回調(diào)用處帶回調(diào)用處2C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.2.2 C+程序的結(jié)構(gòu)特性程序的結(jié)構(gòu)特性1.包含文件及頭文件包含文件及頭文件2.標(biāo)準(zhǔn)輸入與輸出標(biāo)準(zhǔn)輸入與輸出 printf(格式說明格式說明,表達(dá)式表列表達(dá)式表列); scanf(格式說明格式說明,地址表列地址表列); cout3.新行新行 “n” endl4.主函數(shù)主函數(shù) void main( ) .5. 一般的函數(shù)一般的函數(shù) 函數(shù)頭函數(shù)頭 int add (int a, int b
4、) 函數(shù)體函數(shù)體 int c; /變量定義變量定義 c=a+b; /執(zhí)行部分執(zhí)行部分 return c; 3C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座6.面向?qū)ο蟮奶匦悦嫦驅(qū)ο蟮奶匦?類的聲明部分類的聲明部分 類的使用部分類的使用部分例例2.2 #include /類的聲明部分類的聲明部分class A int x,y,z; /類類A的數(shù)據(jù)成員聲明的數(shù)據(jù)成員聲明 fun( ) /類類A的成員函數(shù)聲明的成員函數(shù)聲明 ;/類的使用部分類的使用部分void main( ) A a; /創(chuàng)建一個(gè)類創(chuàng)建一個(gè)類A的對(duì)象的對(duì)象a . a.fun( ); /給對(duì)象給對(duì)象a發(fā)消息,調(diào)用成員函數(shù)發(fā)消息,調(diào)用成員函數(shù)fun( )C
5、語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.3 C+在非面向?qū)ο蠓矫娴囊恍┨匦栽诜敲嫦驅(qū)ο蠓矫娴囊恍┨匦?.3.1 注釋行注釋行/* */ C的注釋的注釋 / C +的注釋的注釋2.3.2 新的新的I/O流流cin是標(biāo)準(zhǔn)輸入流,在程序中代表標(biāo)準(zhǔn)輸入設(shè)備,即鍵盤。是標(biāo)準(zhǔn)輸入流,在程序中代表標(biāo)準(zhǔn)輸入設(shè)備,即鍵盤。 運(yùn)算符運(yùn)算符“”表示向右表示向右cout是標(biāo)準(zhǔn)輸出流,在程序中代表標(biāo)準(zhǔn)輸出設(shè)備,即屏幕。是標(biāo)準(zhǔn)輸出流,在程序中代表標(biāo)準(zhǔn)輸出設(shè)備,即屏幕。 運(yùn)算符運(yùn)算符“”表示向左表示向左使用使用cin或或cout進(jìn)行進(jìn)行I/O操作時(shí),在程序中必須嵌入頭文件操作時(shí),在程序中必須嵌入頭文件iostream.h/例例2.3#
6、include int main( ) char name20; coutname; coutnameendl; return 0;/例例2.4#include void main( ) int x=25;couthexxdecxoctx=0;k-) . .以上的寫法在以上的寫法在C程序中都是錯(cuò)誤的,但在程序中都是錯(cuò)誤的,但在C+程序中都是正確的。程序中都是正確的。5C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.3.4 結(jié)構(gòu)、聯(lián)合和枚舉名可直接作為類型名結(jié)構(gòu)、聯(lián)合和枚舉名可直接作為類型名定義枚舉類型名:定義枚舉類型名:enum bool FALSE, TRUE;定義結(jié)構(gòu)枚舉類型名:定義結(jié)構(gòu)枚舉類型名:Stru
7、ct student int sno; char *sneme;C語言中定義枚舉類型變量:語言中定義枚舉類型變量: enum bool done;定義結(jié)構(gòu)類型變量:定義結(jié)構(gòu)類型變量: struct student s1, s2;C+語言中定義枚舉類型變量:語言中定義枚舉類型變量: bool done;定義結(jié)構(gòu)類型變量:定義結(jié)構(gòu)類型變量: student s1, s2;6C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.3.5 const修飾符修飾符#define LIMIT 100這里這里 LIMIT 是一個(gè)標(biāo)志,代表是一個(gè)標(biāo)志,代表 100const int LIMIT=100;這里這里 LIMIT 是一個(gè)常量
8、名,在內(nèi)存有空間放了是一個(gè)常量名,在內(nèi)存有空間放了100,因此有地址,因此有地址,可以用指針指向這空間,但不能修改它??梢杂弥羔樦赶蜻@空間,但不能修改它。int i=100;這里這里 i 是一個(gè)變量名,在內(nèi)存有空間放了是一個(gè)變量名,在內(nèi)存有空間放了100,因此有地址,可以用,因此有地址,可以用指針指向這空間,且可以改放別的整數(shù)。指針指向這空間,且可以改放別的整數(shù)。(1) 可以用一個(gè)指向常量的指針變量指向常量:可以用一個(gè)指向常量的指針變量指向常量: const char *name=“chen”; name3=a; /錯(cuò)誤錯(cuò)誤 name=“zhang”;/正確正確(2)指針常量指針常量 char
9、 *const name=“chen”; name3=a; /正確正確 name=“zhang”; /錯(cuò)誤錯(cuò)誤(3) const char *const name =“chen”;namechen常量常量zhang常量常量nXanamechenzhang常量常量an aX7C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座/例例2.5#include main( ) int a=1; #define T1 a+a #define T2 T1-T1 coutT2 is T2endl; return 0; cout“T2 is “a+a-a+aendl;/例例2.6#include main( ) int a=1; co
10、nst T1=a+a; const T2=T1-T1; coutT2 is T2endl; return 0;T2a+aa+aT1-T18C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.3.6 內(nèi)置函數(shù)內(nèi)置函數(shù)/例例2.7#include int main( ) 3次次 for(int i=1;i=3;i+) coutr=i area=circle(i)endl; return 0;在函數(shù)前加以在函數(shù)前加以 inline ,成為內(nèi)置函數(shù)成為內(nèi)置函數(shù)#include int main( ) 代碼嵌入代碼嵌入 for(int i=1;i=3;i+) coutr=i area=circle(i)endl; retur
11、n 0;float circle(float r) return 3.1416*r*r; inline float circle(float r) return 3.1416*r*r; 9C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座/例例2.8#include #define doub(x) x*2int main( ) for(int i=1;i=3;i+) couti doubled is doub(i)endl; cout1+2 doubled is doub(1+2)endl; return 0;/例例2.9#include inline int doub(int x) return x*2; int
12、main( ) for(int i=1;i=3;i+) couti doubled is doub(i)endl; cout1+2 doubled is doub(1+2)endl; return 0;10C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.3.7 函數(shù)原型函數(shù)原型返回類型返回類型 函數(shù)名(參數(shù)表)函數(shù)名(參數(shù)表);/例例2.10#include void write(char *s); /函數(shù)原型或叫函數(shù)聲明函數(shù)原型或叫函數(shù)聲明 void main( ) write(Hello, world!); void write(char *s)無分號(hào)無分號(hào) coutsendl; 使用在前,定義在后,要先聲
13、明。使用在前,定義在后,要先聲明。若定義在前,使用在后,就可不必聲明。若定義在前,使用在后,就可不必聲明。說明說明: (1) - (8)11C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.3.8 帶有缺省參數(shù)的函數(shù)帶有缺省參數(shù)的函數(shù)C+在說明函數(shù)原型時(shí),可以為一個(gè)或多個(gè)參數(shù)指定缺省參數(shù)值,在說明函數(shù)原型時(shí),可以為一個(gè)或多個(gè)參數(shù)指定缺省參數(shù)值,以后調(diào)用此函數(shù)時(shí),若省略其中某一實(shí)參,以后調(diào)用此函數(shù)時(shí),若省略其中某一實(shí)參,C+自動(dòng)以缺省值作為自動(dòng)以缺省值作為相應(yīng)參數(shù)的值。相應(yīng)參數(shù)的值。int special(int x=5, float y=5.3);合法的調(diào)用;合法的調(diào)用;special();special(25)
14、;special(100,79.8);說明說明:(1)所有取缺省值參數(shù)都必須出現(xiàn)在不取缺省值參數(shù)的右邊。所有取缺省值參數(shù)都必須出現(xiàn)在不取缺省值參數(shù)的右邊。 int fun(int i,int j=5, int k) 是錯(cuò)誤的是錯(cuò)誤的 int fun(int i, int k,int j=5) 是正確的是正確的(2)調(diào)用時(shí),若某個(gè)參數(shù)省略,則其后的參數(shù)皆應(yīng)省略。調(diào)用時(shí),若某個(gè)參數(shù)省略,則其后的參數(shù)皆應(yīng)省略。不合法的調(diào)用;不合法的調(diào)用;special(,21.5);12C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.3.9 函數(shù)重載函數(shù)重載C+中,只要函數(shù)的參數(shù)的類型不同,或者參數(shù)個(gè)數(shù)不同,或者二中,只要函數(shù)的參數(shù)
15、的類型不同,或者參數(shù)個(gè)數(shù)不同,或者二兼有之,幾個(gè)函數(shù)可以用相同的函數(shù)名。稱為函數(shù)重載兼有之,幾個(gè)函數(shù)可以用相同的函數(shù)名。稱為函數(shù)重載/*例例2.11#include int square(int i) return i*i; float square(float f) return f*f; double square(double d) return d*d; void main( ) int i=12; float f=3.4; double d=5.67; couti*i=square(i)endl; coutf*f=square(f)endl; coutd*d=square(d)end
16、l;13C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座/*例例2.12#include int mul(int x, int y) return x*y; int mul(int x, int y, int z) return x*y*z; void main( ) int a=3,b=4,c=5; couta*b=mul(a,b)endl; couta*b*c=mul(a,b,c)endl; 說明:說明:(1)重載函數(shù)應(yīng)在參數(shù)個(gè)數(shù)或參數(shù)類型上有所不同,編譯才能識(shí)別調(diào)重載函數(shù)應(yīng)在參數(shù)個(gè)數(shù)或參數(shù)類型上有所不同,編譯才能識(shí)別調(diào)用哪一個(gè)重載版本,即使返回類型不同也不行。用哪一個(gè)重載版本,即使返回類型不同也不行。如:如:
17、int mul(int x, int y) ;和和 double mul(int x, int y); 是不能重載的。是不能重載的。(2)一般而言,重載函數(shù)應(yīng)對(duì)不同的參數(shù)情況執(zhí)行相同的功能。一般而言,重載函數(shù)應(yīng)對(duì)不同的參數(shù)情況執(zhí)行相同的功能。如:如:abs(int x); 和和 abs(float x);都是求絕對(duì)值,一個(gè)是整數(shù)的絕對(duì)值都是求絕對(duì)值,一個(gè)是整數(shù)的絕對(duì)值,一個(gè)是實(shí)數(shù)的。,一個(gè)是實(shí)數(shù)的。14C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座(3) 函數(shù)的重載與帶默認(rèn)值的函數(shù)一起使用時(shí),有可能引起二義性函數(shù)的重載與帶默認(rèn)值的函數(shù)一起使用時(shí),有可能引起二義性如:如: void Drawcircle(int r
18、=0; int x=0; int y=0); void Drawcircle(int r);當(dāng)調(diào)用:當(dāng)調(diào)用: Drawcircle(20); 編譯程序無法確定用哪一個(gè)函數(shù)。編譯程序無法確定用哪一個(gè)函數(shù)。(4) 在函數(shù)調(diào)用時(shí),當(dāng)實(shí)參與形參類型不相符,在函數(shù)調(diào)用時(shí),當(dāng)實(shí)參與形參類型不相符,C+會(huì)自動(dòng)做類型轉(zhuǎn)會(huì)自動(dòng)做類型轉(zhuǎn)換,但有時(shí)也可能產(chǎn)生錯(cuò)誤:換,但有時(shí)也可能產(chǎn)生錯(cuò)誤: void f_a(int x); void f_a(long x); int c=f_a(5.56); ?C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.3.10 作用域運(yùn)算符作用域運(yùn)算符:當(dāng)全局變量和局部變量同名時(shí),函數(shù)中不能使用全局變量。當(dāng)全
19、局變量和局部變量同名時(shí),函數(shù)中不能使用全局變量。/*例例2.13#include int avar=10; /全局變量全局變量void main( ) int avar=25; /局部變量局部變量 coutavar is avarendl; 局部變量局部變量可用作用域運(yùn)算符可用作用域運(yùn)算符 : /*例例2.13#include int avar;void main( ) int avar; avar=25; /局部變量局部變量avar :avar=10; /全局變量全局變量avar coutlocal avar = avarendl; coutglobal avar = :avarendl;1
20、5C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.3.11 無名聯(lián)合無名聯(lián)合C語言的共用體:語言的共用體:union data int i; char ch; float f;union data a,b,c;引用:引用:a.i a.ch a.f 等等C+的無名聯(lián)合:的無名聯(lián)合:union int i; char ch; float f; 直接可用直接可用 i ch f 等等16a4字字節(jié)節(jié)ichfC語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.3.12 強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換C語言的強(qiáng)制類型轉(zhuǎn)換:語言的強(qiáng)制類型轉(zhuǎn)換:int i=10;float x=(float)i;C+的強(qiáng)制類型轉(zhuǎn)換:的強(qiáng)制類型轉(zhuǎn)換:int i=10;fl
21、oat x=float(i);float y=(float)i;兩種方法兩種方法C+都可以。都可以。17C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.3.13 new和和delete C語言用函數(shù)語言用函數(shù)malloc()和和free()動(dòng)態(tài)分配內(nèi)存和釋放動(dòng)態(tài)分配的動(dòng)態(tài)分配內(nèi)存和釋放動(dòng)態(tài)分配的內(nèi)存。內(nèi)存。C+使用運(yùn)算符使用運(yùn)算符new和和delete能更好、更簡單地進(jìn)行內(nèi)存的分能更好、更簡單地進(jìn)行內(nèi)存的分配和釋放。配和釋放。 如如C語言中用:語言中用: int *p; p=(int *) malloc ( sizeof(int) ); *p=10; 而而C+語言中語言中 /*2.14#include void
22、 main( ) int *p; /定義一個(gè)整型指針變量定義一個(gè)整型指針變量p p=new int; /動(dòng)態(tài)分配一個(gè)整型存儲(chǔ)區(qū)動(dòng)態(tài)分配一個(gè)整型存儲(chǔ)區(qū),并把首地址賦給并把首地址賦給p *p=10; cout*pendl; delete p; /釋放釋放p指的空間指的空間,撤消指針撤消指針pnew 和和 delete 的優(yōu)點(diǎn):的優(yōu)點(diǎn):(1)new可以自動(dòng)計(jì)算所要分配內(nèi)存的類型的大小,而不必用可以自動(dòng)計(jì)算所要分配內(nèi)存的類型的大小,而不必用sizeof來來計(jì)算。計(jì)算。p18C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座(2)new能夠自動(dòng)返回正確的指針類型,而不必進(jìn)行類型轉(zhuǎn)換。能夠自動(dòng)返回正確的指針類型,而不必進(jìn)行類型轉(zhuǎn)
23、換。(3)可以用可以用new將分配的對(duì)象初始化。將分配的對(duì)象初始化。(4)new 和和 delete 都可以被重載,允許建立自定義的分配系統(tǒng)。都可以被重載,允許建立自定義的分配系統(tǒng)。說明:說明:(1)使用使用new可以為數(shù)組動(dòng)態(tài)分配內(nèi)存空間(但不能賦初值)??梢詾閿?shù)組動(dòng)態(tài)分配內(nèi)存空間(但不能賦初值)。 int *pi=new int10; int *pi=new int234;(2)new可在為簡單變量分配內(nèi)存空間的同時(shí),進(jìn)行初始化??稍跒楹唵巫兞糠峙鋬?nèi)存空間的同時(shí),進(jìn)行初始化。/*例例2.16#include void main( ) int *p; p=new int(99); /動(dòng)態(tài)分配
24、內(nèi)存動(dòng)態(tài)分配內(nèi)存,并將并將99作為初始值賦給它作為初始值賦給它 cout*pendl; delete p;(3)釋放動(dòng)態(tài)分配的數(shù)組存儲(chǔ)區(qū):釋放動(dòng)態(tài)分配的數(shù)組存儲(chǔ)區(qū): delete p;19C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座(4)使用動(dòng)態(tài)分配內(nèi)存時(shí),分配失敗,將返回空指針(使用動(dòng)態(tài)分配內(nèi)存時(shí),分配失敗,將返回空指針(NULL)。)。因此通常要對(duì)內(nèi)存的動(dòng)態(tài)分配是否成功進(jìn)行檢查。因此通常要對(duì)內(nèi)存的動(dòng)態(tài)分配是否成功進(jìn)行檢查。 分配內(nèi)存失敗,分配內(nèi)存失敗,p=NULL/*例例2.17#include void main( ) int *p; p=new int; if(!p) /若分配內(nèi)存失敗若分配內(nèi)存失敗 c
25、outallocation failuren; return ; *p=20; cout*pendl; delete p;(5) 用用new分配的空間,使用結(jié)束后應(yīng)用分配的空間,使用結(jié)束后應(yīng)用delete顯式地釋放。顯式地釋放。p NULL20C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.3.14 引用引用引用可為變量起別名,主要有變量的引用、函數(shù)參數(shù)的引用、函數(shù)引用可為變量起別名,主要有變量的引用、函數(shù)參數(shù)的引用、函數(shù)返回值的引用。返回值的引用。1.引用變量引用變量 數(shù)據(jù)類型數(shù)據(jù)類型 &別名別名=已定義的變量名;已定義的變量名;/*例例2.18#include void main( ) int i;
26、 int &j=i; / i 又叫又叫 j i i=30; j couti=ij=jn; j=80; couti=ij=jn; cout“Address of i ”&i“n”; /顯示顯示 i 的地址的地址 coutAddress of j &jn;(1)定義引用時(shí),必須立即對(duì)它進(jìn)行初始化,不能以后再賦值。定義引用時(shí),必須立即對(duì)它進(jìn)行初始化,不能以后再賦值。 int i; int &j; /錯(cuò)誤錯(cuò)誤 j=i;21C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座(2) 引用實(shí)際上是一種隱式指針,可以少用引用實(shí)際上是一種隱式指針,可以少用 “*” 號(hào)號(hào) /*例例2.19 #includ
27、e void main( ) int i=15; /整型變量整型變量i int *iptr=&i; /iptr指向指向i int &rptr=i; /rptr引用引用i couti is iendl; cout*iptr is *iptrendl; coutrptr is rptrendl; i=29; cout After changing i to 29endl; couti is iendl; cout*iptr is *iptrendl; coutrptr is rptrendl;i is 15 i is 29*iptr is 15 *iptr is 29rptr is
28、 15 rptr is 29iptrirptr22C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座(3)引用不可重新賦值,不可使其作為另一個(gè)變量的別名。引用不可重新賦值,不可使其作為另一個(gè)變量的別名。int i, k;int &j=i;j=&k; /錯(cuò)誤錯(cuò)誤(4)并不是任何類型的數(shù)據(jù)都可引:并不是任何類型的數(shù)據(jù)都可引:int &a10; /不能建立引用數(shù)組不能建立引用數(shù)組int &*p; /不能建立指向引用的指針不能建立指向引用的指針int &r; /不能建立引用的引用不能建立引用的引用(5)當(dāng)使用取地址運(yùn)算符時(shí)當(dāng)使用取地址運(yùn)算符時(shí)&,取的是被引用變量的地址。,取的是
29、被引用變量的地址。int num=50;int &ref=num;int *p=&ref;則則p中保存的是變量中保存的是變量num的地址。的地址。(6) 引用符雖然與地址符一樣,但不會(huì)引起二義性。引用符雖然與地址符一樣,但不會(huì)引起二義性。2. 引用作為函數(shù)參數(shù)引用作為函數(shù)參數(shù)引用參數(shù)的方法可以代替引用參數(shù)的方法可以代替C語言中的指針地址調(diào)用的方式。語言中的指針地址調(diào)用的方式。23C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座/*例例2.20 C語言中的指針地址調(diào)用的方式語言中的指針地址調(diào)用的方式#include void s *m, int *n) int temp; temp=*m; *m=*n
30、; *n=temp;void main( ) int a=5,b=10; couta=a b=bendl; s); couta=a b=bendl;a=5 b=10a=10 b=524m &aatemn &bbC語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座/*例例2.21 引用參數(shù)的方法引用參數(shù)的方法#include void s &m, int &n) int temp; temp=m; m=n; n=temp;main( ) int a=5,b=10; couta=a b=bendl; s); couta=a b=bendl; return 0;a=5 b=10a=10 b=5
31、25 matem nbC語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座3. 引用返回值引用返回值函數(shù)可返回一個(gè)引用,其目的是可將函數(shù)用在賦值運(yùn)算符的左邊。函數(shù)可返回一個(gè)引用,其目的是可將函數(shù)用在賦值運(yùn)算符的左邊。/*例例2.22#include int a=1,3,5,7,9;int &index(int); /聲明返回引用的函數(shù)聲明返回引用的函數(shù)void main( ) index(2)=25; /將將a2重新賦值為重新賦值為25 coutindex(2)endl;int &index(int i) return ai; 26C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座4. 引用舉例引用舉例例例2.23 /引用參數(shù)
32、和引用返回值引用參數(shù)和引用返回值#include int &max(int &num1, int &num2);int &min(int &num1, int &num2);main( ) int num1, num2; coutnum1; coutnum2; max(num1,num2)=0; coutn把大的數(shù)置成把大的數(shù)置成 0 后后, 這兩個(gè)數(shù)是這兩個(gè)數(shù)是:; coutnnum1 和和 num2n; coutn再一次輸入二個(gè)數(shù)再一次輸入二個(gè)數(shù):n; coutnum1; coutnum2;27C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座 min(num1,n
33、um2)=0; coutn把小的數(shù)置成把小的數(shù)置成 0 后后, 這兩個(gè)數(shù)是這兩個(gè)數(shù)是:; coutnnum1 和和 num2num2)?num1:num2; int &min(int &num1, int &num2) /兩數(shù)中找小數(shù)兩數(shù)中找小數(shù) return (num1num2)?num1:num2; 運(yùn)行結(jié)果:運(yùn)行結(jié)果:輸入第一個(gè)數(shù)輸入第一個(gè)數(shù): 45輸入第二個(gè)數(shù)輸入第二個(gè)數(shù): 78把大的數(shù)置成把大的數(shù)置成 0 后后, 這兩個(gè)數(shù)是這兩個(gè)數(shù)是: 45 和和 0 再一次輸入二個(gè)數(shù)再一次輸入二個(gè)數(shù):輸入第一個(gè)數(shù)輸入第一個(gè)數(shù): 13輸入第二個(gè)數(shù)輸入第二個(gè)數(shù): 56把小的數(shù)置
34、成把小的數(shù)置成 0 后后, 這兩個(gè)數(shù)是這兩個(gè)數(shù)是:0 和和 5628C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座 2.3.15 void 指針指針void 型指針是一通用型指針,可指任何類型:型指針是一通用型指針,可指任何類型:void pa; /錯(cuò)誤,不能聲明錯(cuò)誤,不能聲明void類型的變量類型的變量void *pa; /正確,可以聲明正確,可以聲明void類型的指針類型的指針 int i=456; char c=a; pc=&i; pc=&c;例例2.24#include void main() void *pc; int i=456; char c=a; pc=&i; cout*(
35、int*)pcendl; pc=&c; cout*(char*)pcendl;C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座以下部分是以下部分是C語言復(fù)習(xí)參考語言復(fù)習(xí)參考2.4 存儲(chǔ)類存儲(chǔ)類存儲(chǔ)類存儲(chǔ)類 類型修飾符類型修飾符 類型類型 變量名表列變量名表列;存儲(chǔ)類存儲(chǔ)類 auto static extern register 類型修飾符類型修飾符 const volatile2.4.1 自動(dòng)變量和寄存器變量自動(dòng)變量和寄存器變量2.4.2 靜態(tài)變量靜態(tài)變量2.4.3 外部變量外部變量29C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.5 基本運(yùn)算符和表達(dá)式基本運(yùn)算符和表達(dá)式2.5.1 關(guān)系運(yùn)算符關(guān)系運(yùn)算符2.5.2 算術(shù)運(yùn)算
36、符算術(shù)運(yùn)算符2.5.3 邏輯運(yùn)算符邏輯運(yùn)算符2.5.4 位運(yùn)算符位運(yùn)算符2.5.5 條件運(yùn)算符條件運(yùn)算符2.5.6 逗號(hào)表達(dá)式逗號(hào)表達(dá)式2.5.7sizeof運(yùn)算符運(yùn)算符2.6賦值及運(yùn)算順序賦值及運(yùn)算順序2.7 類型轉(zhuǎn)換類型轉(zhuǎn)換30C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.8 語句語句2.8.1 表達(dá)式語句、空語句和塊語句表達(dá)式語句、空語句和塊語句2.8.2 選擇語句選擇語句 1. if 語句語句 2. switch 語句語句2.8.3 循環(huán)循環(huán) 1. while 語句語句 2. do while 語句語句 3. for 語句語句2.8.4 轉(zhuǎn)移轉(zhuǎn)移 1. break 與與 continue 語句語句 2
37、. goto 語句語句2.8.5 return 語句語句31C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.9 函數(shù)函數(shù)2.9.1 函數(shù)的基礎(chǔ)知識(shí)函數(shù)的基礎(chǔ)知識(shí) 函數(shù)先聲明再調(diào)用后定義的例子函數(shù)先聲明再調(diào)用后定義的例子 #include void main( ) int a,b,c; int sum(int, int); /先申明先申明sum()函數(shù)函數(shù) a=25; b=36; c=sum(a,b); /調(diào)用調(diào)用sum()函數(shù)函數(shù) cout c endl; int sum(int x, int y) /定義定義sum()函數(shù)函數(shù) int temp; temp=x+y; return temp; 32C語言復(fù)習(xí)及
38、C基礎(chǔ)知識(shí)講座/習(xí)題習(xí)題 函數(shù)函數(shù)(7.1)#include void main() int m,n,l,s; int maxj(int a, int b); int minb(int a, int b); printf(輸入個(gè)正整數(shù)輸入個(gè)正整數(shù):); scanf(%d,%d,&m,&n); if (m0 & n0) l=maxj(m,n); s=minb(m,n); printf(%d和和%d的最大公約數(shù)為的最大公約數(shù)為%dn,m,n,l); printf(%d和和%d的最小公倍數(shù)為的最小公倍數(shù)為%dn,m,n,s); else printf(輸入了負(fù)數(shù)輸入了負(fù)數(shù)!n
39、); return;int maxj(int a, int b) int r,t; if(ab) t=a;a=b;b=t; r=a%b; while(r!=0) a=b; b=r; r=a%b; return b;int minb(int a, int b) int r; r=maxj(a,b); if (r!=0) return a*b/r; else return 0;sln78m 56trb78a56rb78a5633C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座/習(xí)題習(xí)題 函數(shù)函數(shù)(7.5)#include #include #include void main() char a255; void con
40、vert(char b); printf(請(qǐng)輸入一個(gè)字符串請(qǐng)輸入一個(gè)字符串: n); gets(a); convert(a); printf(該字符串反序?yàn)樵撟址葱驗(yàn)? n); puts(a); return;void convert(char b) int l,i; char c; l=strlen(b); for(i=0; i=l/2 ;i+) c=bi; bi=bl-i-1; bl-i-1=c; return ;caba1a0b1b0acbdefa254034C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座m#include #include void main() float a,b,c,d,x2; v
41、oid root0(float a, float b, float c, float d,float x); void root1(float a, float b, float c,float x); void root2(float a, float b, float c, float d, float x); printf(請(qǐng)輸入一元二次方程的三個(gè)系數(shù)請(qǐng)輸入一元二次方程的三個(gè)系數(shù) a,b,c:n); scanf(%f,%f,%f,&a,&b,&c); if(a=1e-6) printf(不是一元二次方程不是一元二次方程!n); else printf(方程方程 (
42、%4.1f)x*x+(%4.1f)x+(%4.1f)=0n,a,b,c); d=b*b-4*a*c; if (d0) root0(a,b,c,d,x); printf(由于由于b*b-4*a*c0 因此有二個(gè)實(shí)根因此有二個(gè)實(shí)根:n); printf(x1 = %f n,x1); printf(x2 = %f n,x2); return;36C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.9.2 參數(shù)傳遞及函數(shù)返回值參數(shù)傳遞及函數(shù)返回值 (1) 值傳值傳 一般變量一般變量 (2) 傳地址傳地址 結(jié)構(gòu)結(jié)構(gòu), 數(shù)組數(shù)組 (3) 傳引用傳引用 一般變量一般變量, 結(jié)構(gòu)結(jié)構(gòu), 數(shù)組數(shù)組 缺省參數(shù)缺省參數(shù)2.9.3 使用使
43、用C+系統(tǒng)函數(shù)系統(tǒng)函數(shù)37C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.10 數(shù)組數(shù)組定義定義 類型類型 數(shù)組名數(shù)組名大小大小; int a4; int b34; int c234;使用時(shí)數(shù)組元素使用時(shí)數(shù)組元素 數(shù)組名數(shù)組名表達(dá)式表達(dá)式 a0=10; i=3; ai=5; b03=20; 初始值初始值 定義時(shí)定義時(shí) int a=2,4,6,8,10; int b3=2,4,6,8,10,12;38C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.11 指針指針定義定義 類型類型 *指針變量名指針變量名;2.11.1 使用指針使用指針 取地址運(yùn)算符取地址運(yùn)算符 & 取內(nèi)容運(yùn)算符取內(nèi)容運(yùn)算符 * 位移取值位移取值 #incl
44、ude void main( ) int a10=2,4,6,8,10; for(int *p=a;pa+10;p+) cout p+0 endl; 這里這里 p+0 位移位移+0 ,等價(jià)于,等價(jià)于 *p p=a; p+2 即即 *(p+2) p-i 即即 *(p-i)39C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.11.2 指針運(yùn)算指針運(yùn)算1. 賦值賦值 int x,*px,*q; px=&x; q=px; 表示表示 q 和和 px 同指一個(gè)地方同指一個(gè)地方(q跟著跟著px指指)2. 比較比較 px= =q q!=px 判斷判斷 q 和和 px 是否同指一個(gè)地方是否同指一個(gè)地方 p q 判斷判斷
45、p 和和 q 指在數(shù)組元素的前后指在數(shù)組元素的前后3. 移動(dòng)指針移動(dòng)指針 p=p+3; + - 運(yùn)算運(yùn)算 y=*px+; /y=*(px+); y=*+px; /y=*(+px); y=+*px; /y=+(*px); y=(*px)+; 40C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.11.3 指針和數(shù)組指針和數(shù)組1. 指向一維數(shù)組的指針指向一維數(shù)組的指針 int a4, *p; p=a; 或或 p=&a0; 即即 p 指向指向 a0; 2. 指針數(shù)組指針數(shù)組 許多個(gè)指針變量在一起都可用來指向整數(shù)許多個(gè)指針變量在一起都可用來指向整數(shù) int *pa2; char *pc57; 例例#include
46、 void main( ) int a23=2,4,6,8,10,12; int *pa2; /有二個(gè)指針有二個(gè)指針 pa0 和和 pa1 pa0=a0; pa1=a1; for (int i=0; i2; i+) for(int j=0; j3; j+,pai+) cout aij=” *paiendl; 41C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座3. 指向整個(gè)數(shù)組的指針指向整個(gè)數(shù)組的指針(行指針行指針) 如:如:int (*a)5; int b25=0,1,2,3,4,5,6,7,8,9 a=b; a b 0 1 2 3 4 5 6 7 8 9 #include void main( ) int (*
47、a)5; int b25=0,1,2,3,4,5,6,7,8,9; a=b; for(int i=0;i5;i+) cout i : *(*a+i)endl; a+; for(int i=0;i5;i+) cout i : *(*a+i)endl; 42C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座一維數(shù)組的地址 int a4; a+0 是第是第 0 列的地址列的地址 a+i 是第是第 i 列的地址列的地址 *( a+0) 是第是第 0 列的列的數(shù)據(jù)數(shù)據(jù) * *( (a+i) 是第是第 i 列的列的數(shù)據(jù)數(shù)據(jù)地址 a 數(shù)據(jù) *a &a0 a0一維數(shù)組的指針 int a4, *p; p=a; 可以可以p+p+
48、指針p 數(shù)據(jù) *p a043C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座二維數(shù)組的地址 * *a a0a a0 int a34; *(a+i)+j是第 i 行第 j 列地址 * *( (* *(a+i)+j) a+0 是第是第 0 行的地址行的地址 . a+i 是第是第 i 行的地址行的地址 * *( a+0)是第是第 0 行第行第 0 列的地址列的地址.* *( (a+0)+j是第是第 0 行第行第 j 列的地址列的地址 * *(a+i)是第是第 i 行第行第 0 列的地址列的地址 . * *(a+i)+j是第是第 i 行第行第 j 列的地址列的地址 * *( (* *( (a+0)+0)是第是第0行第行第0
49、列的列的數(shù)據(jù)數(shù)據(jù).(.(* *(a+0)+j) 是第是第0行第行第j列的列的數(shù)據(jù)數(shù)據(jù) * *( (* *( (a+i)+0)是第是第i行第行第0列的列的數(shù)據(jù)數(shù)據(jù).* *( (* *(a+i)+j) 是第是第i行第行第j列的列的數(shù)據(jù)數(shù)據(jù)行地址 a+0 列地址 *(a+0)行地址 a+i 44C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座二維數(shù)組的指針 * *a a0a a0 int a34; (p+i*4+j)是第i行第j列地址 (1)(1) int *p;(小指針) p=p=* *a;a; p=a; p=a; p=a0; p=a0; *(p+i*4+j) p=&a00; p=&a00; 元素地址元
50、素地址: p=p=* *a+j;a+j; p+jp+j p+;p+; 元素?cái)?shù)據(jù)元素?cái)?shù)據(jù): * *p p * *(p+j) pj(p+j) pj * *( a+0)是第是第 0 行第行第 0 列的地址列的地址.* *( (a+0)+j是第是第 0 行第行第 j 列的地址列的地址 * *(a+i)是第是第 i 行第行第 0 列的地址列的地址 . * *(a+i)+j是第是第 i 行第行第 j 列的地址列的地址 * *( (* *( (a+0)+0)是第是第0行第行第0列的列的數(shù)據(jù)數(shù)據(jù).(.(* *(a+0)+j) 是第是第0行第行第j列的列的數(shù)據(jù)數(shù)據(jù) * *( (* *( (a+i)+0)是第是第
51、i行第行第0列的列的數(shù)據(jù)數(shù)據(jù).* *( (* *(a+i)+j) 是第是第i行第行第j列的列的數(shù)據(jù)數(shù)據(jù) p 當(dāng)一維數(shù)組名用但可當(dāng)一維數(shù)組名用但可 p=p+i p+ 走走 (i)一行一行 元素地址元素地址: * *p+jp+j 數(shù)據(jù)數(shù)據(jù): * *( (* *p+j) (p+j) (* *p)jp)j列地址 *(a+0)45C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座struct student struct student int num; int num; float score; float score; struct student struct student * *nextnext;struct stu
52、dent struct student * *p; p; nextnumscore結(jié)點(diǎn)結(jié)點(diǎn)#include #include 申請(qǐng)空間函數(shù):申請(qǐng)空間函數(shù):malloc(malloc(字節(jié)數(shù)字節(jié)數(shù)) )測試字節(jié)運(yùn)算符:測試字節(jié)運(yùn)算符:sizeof(sizeof(類型類型) )p=(struct student p=(struct student * * )malloc(sizeof(struct student) )malloc(sizeof(struct student);釋放空間函數(shù):釋放空間函數(shù):free(free(指針);指針); free( p );free( p );nextnums
53、core結(jié)點(diǎn)結(jié)點(diǎn)p46C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座p1=p2=(struct student p1=p2=(struct student * * )malloc(LEN) )malloc(LEN);scanf(“%d,%f”,&p1-num,&p1-score)scanf(“%d,%f”,&p1-num,&p1-score);nextnumscore結(jié)點(diǎn)結(jié)點(diǎn)p1p p2 220101 89.5headNULLn= 0n= 0 1 1head=p1;headnextnumscorep1p1=(struct student p1=(struct student * *
54、 )malloc(LEN) )malloc(LEN);201032010390902(n=2) p2-next=p1;(n=2) p2-next=p1;p2=p1p2=p1; p p2 2scanf(“%d,%f”,&p1-num,&p1-score);scanf(“%d,%f”,&p1-num,&p1-score);nextnumscore p p1 10 0NULLNULLp1-num=0p1-num=047C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座p pp p0103070811NULLNULLheadheadp p1 1p p2 2p1p20103070811NULLN
55、ULLheadheadp p0 005p p1 1p p01030811headheadNULLp p1 1p2p248C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.11.4 引用引用 引用可為變量起別名,它主要用作函數(shù)參數(shù)以及函數(shù)的返回類引用可為變量起別名,它主要用作函數(shù)參數(shù)以及函數(shù)的返回類型。有參數(shù)引用和返回值引用。型。有參數(shù)引用和返回值引用。 1. 引用說明引用說明 int num=50; int& ref=num; 表示放整數(shù)表示放整數(shù) 50 的內(nèi)存空間的內(nèi)存空間 可叫可叫 num,又可叫,又可叫 ref 引用實(shí)質(zhì)上是為另一個(gè)變量建立別名。引用實(shí)質(zhì)上是為另一個(gè)變量建立別名。 2. 引用參數(shù)引用
56、參數(shù)(傳引用傳引用) 49C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座3. 返回引用的函數(shù)返回引用的函數(shù)當(dāng)一個(gè)函數(shù)的返回值需重新賦值的時(shí)候,我們也可對(duì)當(dāng)一個(gè)函數(shù)的返回值需重新賦值的時(shí)候,我們也可對(duì)返回值進(jìn)行引用,這時(shí)函數(shù)可出現(xiàn)在賦值號(hào)的左邊。返回值進(jìn)行引用,這時(shí)函數(shù)可出現(xiàn)在賦值號(hào)的左邊。這種函數(shù)稱為返回引用的函數(shù)。這種函數(shù)稱為返回引用的函數(shù)。 形式形式 類型類型& 函數(shù)名函數(shù)名(參數(shù)參數(shù))#include int a=2,4,6,8,10,12; int& index(int i); void main( ) index(3)=16; /index(3) 即返回值即返回值ai,i=3,a3改為改
57、為16 coutindex(3)endl; cout a3endl; int& index(int i) return ai; 注意注意: 返回值是函數(shù)內(nèi)的局部變量時(shí)不能引用返回值是函數(shù)內(nèi)的局部變量時(shí)不能引用 50C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座例例#include int e(int i) return i+1; int &f() int i=1; return +i;int g(int &i) i=i+1; return i;main() int r1=e(3); int &r2=e(4); int r3=f(); int &r4=f(); int a=0,b=0,c=0,d; d=g(4); a+=g(g(c); b+=g(e(3); return 1;51C語言復(fù)習(xí)及C基礎(chǔ)知識(shí)講座2.11.5 void類型指針類型指針 void指針是一個(gè)特殊指針,它可以指向任一類型的指針是一個(gè)特殊指針,它可以指向任一類型的C+對(duì)象。對(duì)象。 void main() void *vp; int i=5; floatf=7.8; char c=A; int *ip; float *fp; char *cp; ip=&i; vp=&i; cp=&c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 問卷設(shè)計(jì)培訓(xùn)
- 【公開課】同底數(shù)冪的乘法+課件+2025-2026學(xué)年人教版八年級(jí)數(shù)學(xué)上冊(cè)
- 2025年中高壓齒輪泵項(xiàng)目申請(qǐng)報(bào)告
- 2025年鶴壁市縣區(qū)事業(yè)單位招聘考試筆試試題(含答案)
- 2025年廣東江門市臺(tái)山大灣企業(yè)管理有限公司招聘考試筆試試題(含答案)
- 《閣夜》教學(xué)課件
- 任務(wù)情境教學(xué)課件
- 詞匯記憶教學(xué)課件
- 聲母ie教學(xué)課件
- 教育技術(shù)課件PDF
- 單片機(jī)課程設(shè)計(jì)之超聲波測距-電子工程系單片機(jī)課程設(shè)計(jì)報(bào)告
- 2022年安徽大學(xué)科研助理(校聘)招聘60人筆試備考題庫及答案解析
- 寧騷公共政策學(xué)
- 地下室頂板行車與堆載驗(yàn)算與加固方案
- 四年級(jí)閱讀訓(xùn)練概括文章主要內(nèi)容(完美)
- GB/T 37234-2018文件鑒定通用規(guī)范
- 高中英語讀后續(xù)寫教學(xué)策略的探究
- 2023年鹽城市阜寧縣人民醫(yī)院醫(yī)護(hù)人員招聘筆試題庫及答案解析
- 2022年動(dòng)畫制作行業(yè)分析及未來五至十年行業(yè)發(fā)展報(bào)告
- 畢業(yè)論文答辯
- 染缸操作規(guī)范
評(píng)論
0/150
提交評(píng)論