面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言C-課件_第1頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言C-課件_第2頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言C-課件_第3頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言C-課件_第4頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言C-課件_第5頁(yè)
已閱讀5頁(yè),還剩105頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第五章構(gòu)造數(shù)據(jù)類型丘志杰電子科技大學(xué)計(jì)算機(jī)學(xué)院軟件學(xué)院2022/12/211第五章構(gòu)造數(shù)據(jù)類型丘志杰2022/12/191枚舉類型

“枚舉”是指將變量所有可能的取值一一列舉出來(lái),變量的取值只限于列舉出來(lái)的常量。枚舉類型的聲明的一般形式如下:當(dāng)沒給各枚舉常量指定值時(shí),其值依次默認(rèn)為0、1、2、…;在定義枚舉類型時(shí),也可使用賦值號(hào)另行指定枚舉常量的值。

enum枚舉類型名{枚舉常量1,枚舉常量2,…,枚舉常量n};枚舉!枚舉類型“枚舉”是指將變量所有可能的取值一一列舉出來(lái),例:NeedToDo舉例

例:NeedToDo舉例數(shù)組

數(shù)組是一組在內(nèi)存中依次連續(xù)存放的、具有同一類型的數(shù)據(jù)變量所組成的集合體。數(shù)組元素用數(shù)組名與帶方括號(hào)的數(shù)組下標(biāo)一起標(biāo)識(shí)。數(shù)組數(shù)組是一組在內(nèi)存中依次連續(xù)存放的、具有同一類型的數(shù)據(jù)變一維數(shù)組定義與使用

一維數(shù)組定義的一般形式為:

數(shù)據(jù)類型數(shù)組名[常量表達(dá)式];說(shuō)明:數(shù)組元素的類型可以是void型以外的任何數(shù)據(jù)類型。數(shù)組名代表數(shù)組元素在內(nèi)存中的起始地址,是一個(gè)地址常量。一維數(shù)組定義與使用一維數(shù)組定義的一般形式為:數(shù)組定義之后,系統(tǒng)會(huì)將從內(nèi)存中為其分配一塊連續(xù)的存儲(chǔ)空間,從第1個(gè)數(shù)據(jù)元素開始依次存放各個(gè)數(shù)組元素。 例如:inta[5];數(shù)組定義之后,系統(tǒng)會(huì)將從內(nèi)存中為其分配一塊連續(xù)的存儲(chǔ)一維數(shù)組的初始化

一維數(shù)組初始化的語(yǔ)法形式為: 數(shù)據(jù)類型數(shù)組名[常量表達(dá)式]={初值1,初值2,…,初值n};例如:

intarray[3]={5,6,7};intarray2[3]={1,2};一維數(shù)組的初始化一維數(shù)組初始化的語(yǔ)法形式為:存取一維數(shù)組元素的語(yǔ)法形式為:

數(shù)組名[下標(biāo)表達(dá)式];

讀數(shù)組元素的地址通過(guò)數(shù)組名來(lái)讀取,格式如下:

數(shù)組名+整型表達(dá)式;

&數(shù)組名[下標(biāo)表達(dá)式];

存取一維數(shù)組元素的語(yǔ)法形式為:使用數(shù)組要注意的地方在使用數(shù)組時(shí)最常犯的錯(cuò)誤是下標(biāo)越界。數(shù)組名是一個(gè)地址常量,不能作為左值(賦值的目標(biāo))。因此,不能將一個(gè)數(shù)組整體拷貝給另外一個(gè)數(shù)組。例如:

inta[5],c[5],i;a=c; //錯(cuò)誤!

正確的方法是將對(duì)應(yīng)的元素進(jìn)行拷貝:

for(i=0;i<5;i++)a[i]=c[i];

使用數(shù)組要注意的地方在使用數(shù)組時(shí)最常犯的錯(cuò)誤是下標(biāo)越界。字符數(shù)組與字符串

存放字符型數(shù)據(jù)的數(shù)組稱為字符數(shù)組。

1.用字符進(jìn)行初始化

例如:

char

s1[]={'C','h','i','n','a'};2.用字符串進(jìn)行初始化

例如:

char

s2[]="China";字符數(shù)組與字符串存放字符型數(shù)據(jù)的數(shù)組稱為字符數(shù)組。字符數(shù)組的使用

字符數(shù)組也是數(shù)組,我們同樣可以通過(guò)數(shù)組名及下標(biāo)引用數(shù)組中的元素。為方便對(duì)字符與字符串的處理,C++提供了許多專門處理字符與字符串的函數(shù)。參看P118表5-1。字符數(shù)組的使用字符數(shù)組也是數(shù)組,我們同樣可以通過(guò)數(shù)組名及下指針指針是C++語(yǔ)言最重要特性之一,也是C++的主要難點(diǎn)。指針提供了一種較為直觀的地址操作的手段,正確地使用指針,可以方便、靈活而有效地組織和表示復(fù)雜的數(shù)據(jù)。指針指針是C++語(yǔ)言最重要特性之一,也是C++的主要難點(diǎn)。地址與指針地址:當(dāng)定義一個(gè)變量后,內(nèi)存中將會(huì)劃出一塊由若干個(gè)存儲(chǔ)單元組成的區(qū)域,用于保存該變量的數(shù)據(jù)。在內(nèi)存里每個(gè)存儲(chǔ)單元都有各自的編號(hào),稱為地址。指針:在C++中,提供了指針類型,它是一種用于存放內(nèi)存單元地址的變量類型,地址就存儲(chǔ)在這種指針類型的變量中。正因?yàn)橹羔樧兞看鎯?chǔ)的是地址,用它來(lái)指明內(nèi)存單元,所以形象地稱這種地址變量為指針。

地址與指針地址:當(dāng)定義一個(gè)變量后,內(nèi)存中將會(huì)劃出一塊由若指針變量的定義例如:

int

*ip;//定義了一個(gè)int型的指針變量ipfloat

*fp;//定義了一個(gè)float型指針變量fptypedefintA[10];A*ap;//定義了一個(gè)A類型的指針變量apsizeof(ip)=sizeof(fp)=sizeof(ap)=4;

定義指針變量的格式如下:數(shù)據(jù)類型*變量名;

指針變量的定義例如:定義指針變量的格式如下:數(shù)據(jù)類型指針的初始化與賦值(1)不要將一個(gè)非地址常量、變量以及無(wú)意義的實(shí)際地址賦給指針變量。如:

int*p=100;//int*p=(int*)100;(對(duì)嗎?)

int*p=(char*)100;(2)可以使用一個(gè)已初始化的指針去給另一個(gè)指針賦值,但類型必須一致如果不一致,可進(jìn)行強(qiáng)制類型轉(zhuǎn)換。

char*p=NULL;int*ip=(int*)p+100;

數(shù)據(jù)類型*指針變量名=初始地址表達(dá)式;

指針的初始化與賦值(1)不要將一個(gè)非地址常量、變量以及無(wú)意義(3)對(duì)于基本數(shù)據(jù)類型的變量、數(shù)組元素我們可以使用取地址運(yùn)算符&來(lái)獲得它們的地址,但是也只有類型一致才能賦值。

inta[10];//定義int型數(shù)組

int*i_pointer=a;//定義并初始化int型指針(4)有一種特殊的void類型指針,可以存儲(chǔ)任何的類型地址;但將一個(gè)void類型的地址賦值給非void類型的指針變量,要使用類型強(qiáng)制轉(zhuǎn)換。

voidv;//錯(cuò)誤,不能定義void類型的變量

void*vp;//定義void類型的指針(3)對(duì)于基本數(shù)據(jù)類型的變量、數(shù)組元素我們可以使用取地址運(yùn)算指針運(yùn)算指針通常進(jìn)行下列幾種運(yùn)算:賦值運(yùn)算、取值運(yùn)算、算術(shù)運(yùn)算、相減運(yùn)算、比較運(yùn)算。(1)*和&運(yùn)算

*:指針運(yùn)算符,&:取地址運(yùn)算符。

例如:

inta[4]={1,2,3};int*ip=&a[2];cout<<*ip;*ip=100;

指針運(yùn)算指針通常進(jìn)行下列幾種運(yùn)算:賦值運(yùn)算、取值運(yùn)算(2)指針與整數(shù)的加減運(yùn)算

指針的加減運(yùn)算與普通變量的加減運(yùn)算不同,由于指針存儲(chǔ)的是變量的內(nèi)存地址,指針加上或減去一個(gè)整數(shù)n,表示指針從當(dāng)前位置向后或向前移動(dòng)n個(gè)sizeof(數(shù)據(jù)類型)長(zhǎng)度的存儲(chǔ)單元。因此對(duì)于不同的數(shù)據(jù)類型,n的實(shí)際大小就不同。(2)指針與整數(shù)的加減運(yùn)算(3)指針自增、自減運(yùn)算

指針的自增、自減運(yùn)算是指針加減運(yùn)算的特例。指針的自增或自減表示指針從當(dāng)前位置向后或向前移動(dòng)sizeof(數(shù)據(jù)類型)長(zhǎng)度的存儲(chǔ)單元。

例如:

int*p,a=5;p=&a;p++;//指針p后移4個(gè)字節(jié)(3)指針自增、自減運(yùn)算(4)兩指針相減

當(dāng)兩個(gè)指針指向同一數(shù)組時(shí),兩個(gè)指針的相減才有意義。兩個(gè)指針相減的結(jié)果為一整數(shù),表示兩個(gè)指針之間數(shù)組元素的個(gè)數(shù)。

(5)兩個(gè)指針的比較運(yùn)算

兩個(gè)指針的比較一般用于下列兩種情況:一是比較兩個(gè)指針?biāo)赶虻膶?duì)象在內(nèi)存中的位置關(guān)系;二是判斷指針是否為空指針。

(4)兩指針相減void類型指針

指向void類型的指針是一種不確定類型的指針,它可以指向任何類型的變量。實(shí)際使用void型指針時(shí),只有通過(guò)強(qiáng)制類型轉(zhuǎn)換才能使void型指針得到具體變量的值。在沒有轉(zhuǎn)換前void型指針不能進(jìn)行指針的算術(shù)運(yùn)算。例如:

void

*vp;//定義了一個(gè)void型指針vp

int

i=6,*ip;

vp=&i;//vp指向整型變量icout<<“i=”<<*vp<<endl;//錯(cuò)誤

cout<<"i="<<*(int

*)p<<endl;ip=(int

*)vp;//ip指向vp指向的變量i

cout<<"i="<<*ip<<endl;void類型指針指向void類型的指針是一種不確定指針與字符串

字符型指針:

用于存放字符型變量的地址,而字符串的本質(zhì)是以\0結(jié)尾的字符數(shù)組,一個(gè)字符型指針存儲(chǔ)了字符數(shù)組的第一個(gè)元素的地址,也就存儲(chǔ)了字符串的地址,這個(gè)指針就指向了字符串。在定義一個(gè)字符數(shù)組時(shí),可以將一個(gè)字符串常量作為初值,但將字符串常量作為初值賦給字符數(shù)組和將字符串常量作為初值賦給字符指針變量,二者的含義是不同的。例如:

charstr[5]="abcd";char*p_str="abcd";指針與字符串字符型指針:指針與數(shù)組

1使用指針操作符*存取數(shù)組指針的加減運(yùn)算的特點(diǎn)使得指針操作符特別適合處理存儲(chǔ)在一段連續(xù)內(nèi)存空間中的同類型數(shù)據(jù)。這樣,使用指針操作符來(lái)對(duì)數(shù)組及其元素進(jìn)行操作就非常方便。(1)一維數(shù)組的指針操作

當(dāng)定義數(shù)組一維數(shù)組Ta[N](T為類型),下式為存取數(shù)組元素a[i]的等效方式:*(a+i);而a+i為a[i]的地址。指針與數(shù)組1使用指針操作符*存取數(shù)組數(shù)組指針

數(shù)組指針是指向數(shù)組的指針。例如:int

(*a_p)[5];等效于下列定義方式:①typedefintI_A[5];②I_A*a_p;數(shù)組指針數(shù)組與函數(shù)

數(shù)組名是一個(gè)地址,不能當(dāng)作一個(gè)左值,但是可以作為函數(shù)的形參,接受實(shí)參傳送來(lái)的地址。當(dāng)形參接受實(shí)參傳送來(lái)的地址后,形參數(shù)組與實(shí)參共享內(nèi)存中的一塊空間。函數(shù)體通過(guò)形參對(duì)數(shù)組內(nèi)容的改變會(huì)直接作用到實(shí)參上。數(shù)組名作為形參是數(shù)組應(yīng)用的一個(gè)重要方面。

數(shù)組與函數(shù)數(shù)組名是一個(gè)地址,不能當(dāng)舉例

voidfunc(inta[],intn){ inti; for(i=0;i<n;i++) a[i]+=3;}voidmain(){ inta[]={1,2,3,4}; func(a,4); }

舉例voidfunc(inta[],intn)指向函數(shù)的指針

在程序運(yùn)行時(shí),不僅數(shù)據(jù)要占用內(nèi)存空間,程序的代碼也被調(diào)入內(nèi)存并占據(jù)一定的內(nèi)存空間。每一個(gè)函數(shù)都有函數(shù)名,實(shí)際上,這個(gè)函數(shù)名就是該函數(shù)的代碼在內(nèi)存的起始地址。

當(dāng)調(diào)用一個(gè)函數(shù)時(shí),編譯系統(tǒng)就是根據(jù)函數(shù)名找到函數(shù)代碼的首地址,從而執(zhí)行這段代碼。由此看來(lái),函數(shù)的調(diào)用形式:函數(shù)名(參數(shù)表),其實(shí)質(zhì)就是:函數(shù)代碼首地址(參數(shù)表)。函數(shù)指針:

就是指向某個(gè)函數(shù)的指針,它是專門用于存放該函數(shù)代碼首地址的指針變量。一旦定義了某個(gè)函數(shù)指針,那么,它就與函數(shù)名有同樣的作用,在程序中就可以象使用函數(shù)名一樣,通過(guò)指向該函數(shù)的指針來(lái)調(diào)用該函數(shù)。指向函數(shù)的指針在程序運(yùn)行時(shí),不僅數(shù)據(jù)要占用內(nèi)函數(shù)指針的定義語(yǔ)法形式如下:其中:數(shù)據(jù)類型為函數(shù)指針?biāo)负瘮?shù)的返回值類型;形參表則列出了該指針?biāo)负瘮?shù)的形參類型和個(gè)數(shù)。函數(shù)指針名與*外面的圓括號(hào)()是必須的,如果去掉圓括號(hào),將被解釋為函數(shù)的返回值為指針。

數(shù)據(jù)類型(*函數(shù)指針名)(形參表);

函數(shù)指針的定義語(yǔ)法形式如下:數(shù)據(jù)類型(*函數(shù)指針名)(形

函數(shù)指針在使用之前也要進(jìn)行賦值,使指針指向一個(gè)已經(jīng)存在的函數(shù)代碼的起始地址。語(yǔ)法形式為:

函數(shù)指針名=函數(shù)名;

調(diào)用函數(shù)指針指向的函數(shù)有如下兩種格式:

①函數(shù)指針名(實(shí)參表); ②(*函數(shù)指針名)(實(shí)參表);

例如:

intadd(inta,intb);//定義函數(shù)

int(*fptr)(inta,intb);//定義函數(shù)指針

fptr=add;//函數(shù)指針賦值函數(shù)指針在使用之前也要進(jìn)行賦值,使指針指向一個(gè)已經(jīng)存在的采用下列任何一種形式調(diào)用函數(shù)add:

add(1,2);

(*fptr)(1,2);

fptr(1,2);說(shuō)明:雖然三種調(diào)用形式的結(jié)果完全相同,當(dāng)用指向函數(shù)的指針調(diào)用函數(shù)add()時(shí),習(xí)慣上使用

(*fptr)(1,2),因?yàn)檫@種形式能更直觀地說(shuō)明是用指向函數(shù)的指針來(lái)調(diào)用函數(shù)。采用下列任何一種形式調(diào)用函數(shù)add:說(shuō)明:多重指針

如果已經(jīng)定義了一個(gè)指針類型,我們?cè)俣x一個(gè)指針,用于指向已經(jīng)定義的指針變量,后面定義的指針變量就是一個(gè)指向指針的指針變量,簡(jiǎn)稱指向指針的指針,這樣的指針也稱二重(級(jí))指針。三重及以上的指針統(tǒng)稱為多重指針。例如:

int**pp;

定義了一個(gè)二級(jí)指針變量,等效于下列定義方式:

typedefint*P;P*p;

例:inta,*p,**pp;p=&a;pp=&p; 多重指針如果已經(jīng)定義了一個(gè)指針類型,我們?cè)俣▌?dòng)態(tài)存儲(chǔ)分配和釋放存儲(chǔ)空間C的做法 void* malloc(size_tsize); void free(void*pMemory);例如: char*p=(char*)malloc(100); strcpy(p,”HelloWorld!”); free(p);注意:這里是以字節(jié)計(jì)算的單元數(shù)目2022/12/2132動(dòng)態(tài)存儲(chǔ)分配和釋放存儲(chǔ)空間C的做法注意:這里是以字節(jié)計(jì)算的單C++的做法使用運(yùn)算符new和delete使用形式

type是一個(gè)數(shù)據(jù)類型名,p是該類型的指針變量,new的作用就是從堆空間中分配一塊與type類型的數(shù)據(jù)一樣大小的內(nèi)存(如果分配失敗,new返回一個(gè)空指針),該內(nèi)存地址被存于指針p中。一旦不想再使用,可以用delete來(lái)釋放該內(nèi)存空間。type*p;p=newtype;deletep;2022/12/2133C++的做法使用運(yùn)算符new和deletetype是一舉例int*p;p=newint;*p=50;deletep;2022/12/2134舉例int*p;2022/12/1934幾點(diǎn)注意使用new申請(qǐng)的內(nèi)存空間是沒有名字的,只能通過(guò)指針間接訪問它們。用delete釋放的內(nèi)存空間必須是由new分配的空間,否則執(zhí)行delete時(shí)將會(huì)導(dǎo)致嚴(yán)重的錯(cuò)誤。例如:int*p;deletep;//出錯(cuò)int*p,value;p=&value;deletep;//出錯(cuò)2022/12/2135幾點(diǎn)注意使用new申請(qǐng)的內(nèi)存空間是沒有名字的,只能通過(guò)指針間new和delete的典型用法動(dòng)態(tài)分配和釋放單個(gè)數(shù)據(jù)的存儲(chǔ)區(qū)#include<iostream.h>voidmain(){ int*p;p=newint; if(p==NULL){ cout<<“Allocationfailure!\n”; }else{ *p=15; cout<<*p; deletep; }}pp152022/12/2136new和delete的典型用法動(dòng)態(tài)分配和釋放單個(gè)數(shù)據(jù)的存儲(chǔ)區(qū)用new運(yùn)算符初始化單個(gè)數(shù)據(jù)的存儲(chǔ)區(qū)語(yǔ)法為:type*p;P=newtype(初始值);……deletep;幾點(diǎn)說(shuō)明:是用小括號(hào)將初始值括起來(lái)。初始值可以是常量、變量、以及表達(dá)式。2022/12/2137用new運(yùn)算符初始化單個(gè)數(shù)據(jù)的存儲(chǔ)區(qū)語(yǔ)法為:type*p;舉例#include<iostream.h>voidmain(){ int*p;

p=newint(100); if(p==NULL){ cout<<“Allocationfailure!\n”; }else{ cout<<*p; deletep; }}//如果p=newint(98.5),會(huì)怎么樣?注意:初始值必須與相應(yīng)類型一致。p1002022/12/2138舉例#include<iostream.h>注意:初始值必動(dòng)態(tài)分配一維數(shù)組的存儲(chǔ)空間語(yǔ)法為:type*p;P=newtype[num];……delete[]p;幾點(diǎn)說(shuō)明:num用于指定數(shù)組大小,可以是常量、變量、以及表達(dá)式,并且用中括號(hào)括起來(lái)。通過(guò)p[i]的方式訪問數(shù)組元素。2022/12/2139動(dòng)態(tài)分配一維數(shù)組的存儲(chǔ)空間語(yǔ)法為:type*p;幾點(diǎn)說(shuō)明:#include<iostream.h>voidmain(){ inti,*p;

p=newint[100]; if(p==NULL){ cout<<“Allocationfailure!\n”; }else{ for(i=0;i<100;i++)

p[i]=i+1; for(i=0;i<100;i++) cout<<p[i]<<‘‘;

delete[]p; }}p1100Unit99…Unit02022/12/2140#include<iostream.h>p1100Unit幾點(diǎn)說(shuō)明:new返回的指針指向數(shù)組的起始位置,也就是數(shù)組的第一個(gè)元素。用new動(dòng)態(tài)分配一個(gè)數(shù)組時(shí)不能對(duì)它進(jìn)行初始化。(呵呵,為什么??)2022/12/2141幾點(diǎn)說(shuō)明:2022/12/1941引用Reference簡(jiǎn)單地說(shuō),引用就是給一個(gè)單元起一個(gè)別名。也就是說(shuō),引用與它所引用的變量共享存儲(chǔ)單元。引用主要有以下三種用法:獨(dú)立引用作為函數(shù)參數(shù)作為函數(shù)返回類型2022/12/2142引用Reference簡(jiǎn)單地說(shuō),引用就是給一個(gè)單元起一個(gè)別獨(dú)立引用inti=0,k=8;int&j=i;int*p=&i;j=k;0ijpj是i的引用,i和j是代表同一個(gè)單元。這種使用引用的方式稱為獨(dú)立引用。在聲明獨(dú)立引用時(shí)必須對(duì)它初始化,這種情況下的別名綁定是永久的。語(yǔ)句”j=k;”

不是試圖使j成為k的別名,而是在給j賦值,即使j的值也就是i的值等于k。2022/12/2143獨(dú)立引用inti=0,k=8;0ijpj是i的引用,i初始化獨(dú)立引用的幾種方式賦值表達(dá)式的右端是一個(gè)變量

inta; int&ra=a;賦值表達(dá)式的右端是一個(gè)常量

float&r1=1.0;//早期的C++版本 constfloat&r2=1.0;//近期C++版本定義常引用

intx=1; constint&rx=x;

rx=98;//錯(cuò)誤,只能使用rx,不能修改2022/12/2144初始化獨(dú)立引用的幾種方式賦值表達(dá)式的右端是一個(gè)變量2022/引用作為函數(shù)參數(shù)C++和C一樣,都是采用“傳值”的方式向函數(shù)傳遞參數(shù),從而使實(shí)際參數(shù)和形式參數(shù)相結(jié)合的。在這種情況下,實(shí)參和形參是兩個(gè)不同的單元,在結(jié)合時(shí),實(shí)參的值將會(huì)被拷貝到形參中。2022/12/2145引用作為函數(shù)參數(shù)C++和C一樣,都是采用“傳值”的方式向函數(shù)C++函數(shù)的傳值調(diào)用voidfunc(intnum){ num++;}voidmain(){ intvalue=5;

func(value); cout<<value;}//輸出:5value5(6)num5Stack……Copy…由于“傳值”方式的存在,因此試圖通過(guò)改變形參來(lái)改變實(shí)參的努力是不會(huì)成功的。2022/12/2146C++函數(shù)的傳值調(diào)用voidfunc(intnum)va通過(guò)傳地址來(lái)改變實(shí)參為了解決上述問題,在C語(yǔ)言中,可以通過(guò)傳遞指針的方式來(lái)完成。我們可以通過(guò)形參指針間接地改變實(shí)參。2022/12/2147通過(guò)傳地址來(lái)改變實(shí)參為了解決上述問題,在C語(yǔ)言中,可以通過(guò)傳C語(yǔ)言的傳指針調(diào)用voidfunc(int*pnum){ (*pnum)++;}voidmain(){ intvalue=5;

func(&value); cout<<value;}//輸出:6…valuevalue的地址pnum5(6)Stack……指向此時(shí)實(shí)參與形參的傳遞為:int*pnum=&value;2022/12/2148C語(yǔ)言的傳指針調(diào)用voidfunc(int*pnum){C++傳遞引用的方式C++采用了比傳遞指針更好的方式:傳遞引用。在這種情況下,形參的名字將被看作是實(shí)參的別名(同獨(dú)立引用的情況一樣),也就是說(shuō),形參就是實(shí)參本身。此時(shí)對(duì)形參的改變也就直接改變了實(shí)參。2022/12/2149C++傳遞引用的方式C++采用了比傳遞指針更好的方式:傳遞引C++語(yǔ)言的引用調(diào)用voidfunc(int&pnum){ pnum++;}voidmain(){ intvalue=5;

func(value); cout<<value;}//輸出:6…valuepnum5(6)Stack……此時(shí)實(shí)參與形參的傳遞為:int&pnum=value;2022/12/2150C++語(yǔ)言的引用調(diào)用voidfunc(int&pnum)引用作為函數(shù)的返回函數(shù)返回引用,實(shí)際上返回的是一個(gè)存儲(chǔ)單元(變量),即“左值”。因此,如果一個(gè)函數(shù)返回引用,那么函數(shù)調(diào)用可以出現(xiàn)在賦值號(hào)的左邊。這種情況在C語(yǔ)言里是見不到的。值得注意的是,因?yàn)榉祷氐囊檬且粋€(gè)存儲(chǔ)單元,所以函數(shù)返回后這個(gè)單元的生命期應(yīng)該不會(huì)結(jié)束,否則返回值將沒有意義。2022/12/2151引用作為函數(shù)的返回函數(shù)返回引用,實(shí)際上返回的是一個(gè)存儲(chǔ)單元(舉例int&f(int*pint){ return*pint;}voidmain(){ inta=10,b; b=f(&a)*5; f(&a)=88; cout<<b<<““<<a;}//輸出:50882022/12/2152舉例int&f(int*pint){2022/12/19結(jié)構(gòu)與聯(lián)合

數(shù)組是由類型相同的數(shù)據(jù)元素構(gòu)成的。然而,程序中往往需要處理一些由不同類型數(shù)據(jù)元素所構(gòu)成的數(shù)據(jù)。

例如,一個(gè)學(xué)生的基本情況由學(xué)號(hào)、姓名、性別、出生日期、成績(jī)等數(shù)據(jù)元素構(gòu)成,這些數(shù)據(jù)元素具有不同的數(shù)據(jù)類型,如果使用獨(dú)立的不同數(shù)據(jù)類型的變量來(lái)描述這些信息,那么,變量之間的關(guān)系不能體現(xiàn)出來(lái)。C++也提供了描述不同數(shù)據(jù)類型的組合體的方法:結(jié)構(gòu)和聯(lián)合。

結(jié)構(gòu)與聯(lián)合數(shù)組是由類型相同的數(shù)據(jù)元素構(gòu)成的。然結(jié)構(gòu)

結(jié)構(gòu)類型將不同數(shù)據(jù)類型組合成一個(gè)整體類型,是一種“用戶自定義構(gòu)造數(shù)據(jù)類型”。定義結(jié)構(gòu)類型的格式如下:struct結(jié)構(gòu)類型名{

數(shù)據(jù)類型1成員名1;數(shù)據(jù)類型2成員名2;

……

數(shù)據(jù)類型n成員名n;};結(jié)構(gòu)結(jié)構(gòu)類型將不同數(shù)據(jù)類型組合成一個(gè)整體類型,是一聯(lián)合

聯(lián)合類型提供了一種可以將幾種不同類型數(shù)據(jù)存放于同一段內(nèi)存,對(duì)其中各個(gè)成員可以按名存取的機(jī)制。聯(lián)合類型定義的語(yǔ)法形式為: union聯(lián)合類型名 {

數(shù)據(jù)類型1成員名1; 數(shù)據(jù)類型2成員名2;

……

數(shù)據(jù)類型n成員名n; };聯(lián)合聯(lián)合類型提供了一種可以將幾種不同類型數(shù)第五章構(gòu)造數(shù)據(jù)類型丘志杰電子科技大學(xué)計(jì)算機(jī)學(xué)院軟件學(xué)院2022/12/2156第五章構(gòu)造數(shù)據(jù)類型丘志杰2022/12/191枚舉類型

“枚舉”是指將變量所有可能的取值一一列舉出來(lái),變量的取值只限于列舉出來(lái)的常量。枚舉類型的聲明的一般形式如下:當(dāng)沒給各枚舉常量指定值時(shí),其值依次默認(rèn)為0、1、2、…;在定義枚舉類型時(shí),也可使用賦值號(hào)另行指定枚舉常量的值。

enum枚舉類型名{枚舉常量1,枚舉常量2,…,枚舉常量n};枚舉!枚舉類型“枚舉”是指將變量所有可能的取值一一列舉出來(lái),例:NeedToDo舉例

例:NeedToDo舉例數(shù)組

數(shù)組是一組在內(nèi)存中依次連續(xù)存放的、具有同一類型的數(shù)據(jù)變量所組成的集合體。數(shù)組元素用數(shù)組名與帶方括號(hào)的數(shù)組下標(biāo)一起標(biāo)識(shí)。數(shù)組數(shù)組是一組在內(nèi)存中依次連續(xù)存放的、具有同一類型的數(shù)據(jù)變一維數(shù)組定義與使用

一維數(shù)組定義的一般形式為:

數(shù)據(jù)類型數(shù)組名[常量表達(dá)式];說(shuō)明:數(shù)組元素的類型可以是void型以外的任何數(shù)據(jù)類型。數(shù)組名代表數(shù)組元素在內(nèi)存中的起始地址,是一個(gè)地址常量。一維數(shù)組定義與使用一維數(shù)組定義的一般形式為:數(shù)組定義之后,系統(tǒng)會(huì)將從內(nèi)存中為其分配一塊連續(xù)的存儲(chǔ)空間,從第1個(gè)數(shù)據(jù)元素開始依次存放各個(gè)數(shù)組元素。 例如:inta[5];數(shù)組定義之后,系統(tǒng)會(huì)將從內(nèi)存中為其分配一塊連續(xù)的存儲(chǔ)一維數(shù)組的初始化

一維數(shù)組初始化的語(yǔ)法形式為: 數(shù)據(jù)類型數(shù)組名[常量表達(dá)式]={初值1,初值2,…,初值n};例如:

intarray[3]={5,6,7};intarray2[3]={1,2};一維數(shù)組的初始化一維數(shù)組初始化的語(yǔ)法形式為:存取一維數(shù)組元素的語(yǔ)法形式為:

數(shù)組名[下標(biāo)表達(dá)式];

讀數(shù)組元素的地址通過(guò)數(shù)組名來(lái)讀取,格式如下:

數(shù)組名+整型表達(dá)式;

&數(shù)組名[下標(biāo)表達(dá)式];

存取一維數(shù)組元素的語(yǔ)法形式為:使用數(shù)組要注意的地方在使用數(shù)組時(shí)最常犯的錯(cuò)誤是下標(biāo)越界。數(shù)組名是一個(gè)地址常量,不能作為左值(賦值的目標(biāo))。因此,不能將一個(gè)數(shù)組整體拷貝給另外一個(gè)數(shù)組。例如:

inta[5],c[5],i;a=c; //錯(cuò)誤!

正確的方法是將對(duì)應(yīng)的元素進(jìn)行拷貝:

for(i=0;i<5;i++)a[i]=c[i];

使用數(shù)組要注意的地方在使用數(shù)組時(shí)最常犯的錯(cuò)誤是下標(biāo)越界。字符數(shù)組與字符串

存放字符型數(shù)據(jù)的數(shù)組稱為字符數(shù)組。

1.用字符進(jìn)行初始化

例如:

char

s1[]={'C','h','i','n','a'};2.用字符串進(jìn)行初始化

例如:

char

s2[]="China";字符數(shù)組與字符串存放字符型數(shù)據(jù)的數(shù)組稱為字符數(shù)組。字符數(shù)組的使用

字符數(shù)組也是數(shù)組,我們同樣可以通過(guò)數(shù)組名及下標(biāo)引用數(shù)組中的元素。為方便對(duì)字符與字符串的處理,C++提供了許多專門處理字符與字符串的函數(shù)。參看P118表5-1。字符數(shù)組的使用字符數(shù)組也是數(shù)組,我們同樣可以通過(guò)數(shù)組名及下指針指針是C++語(yǔ)言最重要特性之一,也是C++的主要難點(diǎn)。指針提供了一種較為直觀的地址操作的手段,正確地使用指針,可以方便、靈活而有效地組織和表示復(fù)雜的數(shù)據(jù)。指針指針是C++語(yǔ)言最重要特性之一,也是C++的主要難點(diǎn)。地址與指針地址:當(dāng)定義一個(gè)變量后,內(nèi)存中將會(huì)劃出一塊由若干個(gè)存儲(chǔ)單元組成的區(qū)域,用于保存該變量的數(shù)據(jù)。在內(nèi)存里每個(gè)存儲(chǔ)單元都有各自的編號(hào),稱為地址。指針:在C++中,提供了指針類型,它是一種用于存放內(nèi)存單元地址的變量類型,地址就存儲(chǔ)在這種指針類型的變量中。正因?yàn)橹羔樧兞看鎯?chǔ)的是地址,用它來(lái)指明內(nèi)存單元,所以形象地稱這種地址變量為指針。

地址與指針地址:當(dāng)定義一個(gè)變量后,內(nèi)存中將會(huì)劃出一塊由若指針變量的定義例如:

int

*ip;//定義了一個(gè)int型的指針變量ipfloat

*fp;//定義了一個(gè)float型指針變量fptypedefintA[10];A*ap;//定義了一個(gè)A類型的指針變量apsizeof(ip)=sizeof(fp)=sizeof(ap)=4;

定義指針變量的格式如下:數(shù)據(jù)類型*變量名;

指針變量的定義例如:定義指針變量的格式如下:數(shù)據(jù)類型指針的初始化與賦值(1)不要將一個(gè)非地址常量、變量以及無(wú)意義的實(shí)際地址賦給指針變量。如:

int*p=100;//int*p=(int*)100;(對(duì)嗎?)

int*p=(char*)100;(2)可以使用一個(gè)已初始化的指針去給另一個(gè)指針賦值,但類型必須一致如果不一致,可進(jìn)行強(qiáng)制類型轉(zhuǎn)換。

char*p=NULL;int*ip=(int*)p+100;

數(shù)據(jù)類型*指針變量名=初始地址表達(dá)式;

指針的初始化與賦值(1)不要將一個(gè)非地址常量、變量以及無(wú)意義(3)對(duì)于基本數(shù)據(jù)類型的變量、數(shù)組元素我們可以使用取地址運(yùn)算符&來(lái)獲得它們的地址,但是也只有類型一致才能賦值。

inta[10];//定義int型數(shù)組

int*i_pointer=a;//定義并初始化int型指針(4)有一種特殊的void類型指針,可以存儲(chǔ)任何的類型地址;但將一個(gè)void類型的地址賦值給非void類型的指針變量,要使用類型強(qiáng)制轉(zhuǎn)換。

voidv;//錯(cuò)誤,不能定義void類型的變量

void*vp;//定義void類型的指針(3)對(duì)于基本數(shù)據(jù)類型的變量、數(shù)組元素我們可以使用取地址運(yùn)算指針運(yùn)算指針通常進(jìn)行下列幾種運(yùn)算:賦值運(yùn)算、取值運(yùn)算、算術(shù)運(yùn)算、相減運(yùn)算、比較運(yùn)算。(1)*和&運(yùn)算

*:指針運(yùn)算符,&:取地址運(yùn)算符。

例如:

inta[4]={1,2,3};int*ip=&a[2];cout<<*ip;*ip=100;

指針運(yùn)算指針通常進(jìn)行下列幾種運(yùn)算:賦值運(yùn)算、取值運(yùn)算(2)指針與整數(shù)的加減運(yùn)算

指針的加減運(yùn)算與普通變量的加減運(yùn)算不同,由于指針存儲(chǔ)的是變量的內(nèi)存地址,指針加上或減去一個(gè)整數(shù)n,表示指針從當(dāng)前位置向后或向前移動(dòng)n個(gè)sizeof(數(shù)據(jù)類型)長(zhǎng)度的存儲(chǔ)單元。因此對(duì)于不同的數(shù)據(jù)類型,n的實(shí)際大小就不同。(2)指針與整數(shù)的加減運(yùn)算(3)指針自增、自減運(yùn)算

指針的自增、自減運(yùn)算是指針加減運(yùn)算的特例。指針的自增或自減表示指針從當(dāng)前位置向后或向前移動(dòng)sizeof(數(shù)據(jù)類型)長(zhǎng)度的存儲(chǔ)單元。

例如:

int*p,a=5;p=&a;p++;//指針p后移4個(gè)字節(jié)(3)指針自增、自減運(yùn)算(4)兩指針相減

當(dāng)兩個(gè)指針指向同一數(shù)組時(shí),兩個(gè)指針的相減才有意義。兩個(gè)指針相減的結(jié)果為一整數(shù),表示兩個(gè)指針之間數(shù)組元素的個(gè)數(shù)。

(5)兩個(gè)指針的比較運(yùn)算

兩個(gè)指針的比較一般用于下列兩種情況:一是比較兩個(gè)指針?biāo)赶虻膶?duì)象在內(nèi)存中的位置關(guān)系;二是判斷指針是否為空指針。

(4)兩指針相減void類型指針

指向void類型的指針是一種不確定類型的指針,它可以指向任何類型的變量。實(shí)際使用void型指針時(shí),只有通過(guò)強(qiáng)制類型轉(zhuǎn)換才能使void型指針得到具體變量的值。在沒有轉(zhuǎn)換前void型指針不能進(jìn)行指針的算術(shù)運(yùn)算。例如:

void

*vp;//定義了一個(gè)void型指針vp

int

i=6,*ip;

vp=&i;//vp指向整型變量icout<<“i=”<<*vp<<endl;//錯(cuò)誤

cout<<"i="<<*(int

*)p<<endl;ip=(int

*)vp;//ip指向vp指向的變量i

cout<<"i="<<*ip<<endl;void類型指針指向void類型的指針是一種不確定指針與字符串

字符型指針:

用于存放字符型變量的地址,而字符串的本質(zhì)是以\0結(jié)尾的字符數(shù)組,一個(gè)字符型指針存儲(chǔ)了字符數(shù)組的第一個(gè)元素的地址,也就存儲(chǔ)了字符串的地址,這個(gè)指針就指向了字符串。在定義一個(gè)字符數(shù)組時(shí),可以將一個(gè)字符串常量作為初值,但將字符串常量作為初值賦給字符數(shù)組和將字符串常量作為初值賦給字符指針變量,二者的含義是不同的。例如:

charstr[5]="abcd";char*p_str="abcd";指針與字符串字符型指針:指針與數(shù)組

1使用指針操作符*存取數(shù)組指針的加減運(yùn)算的特點(diǎn)使得指針操作符特別適合處理存儲(chǔ)在一段連續(xù)內(nèi)存空間中的同類型數(shù)據(jù)。這樣,使用指針操作符來(lái)對(duì)數(shù)組及其元素進(jìn)行操作就非常方便。(1)一維數(shù)組的指針操作

當(dāng)定義數(shù)組一維數(shù)組Ta[N](T為類型),下式為存取數(shù)組元素a[i]的等效方式:*(a+i);而a+i為a[i]的地址。指針與數(shù)組1使用指針操作符*存取數(shù)組數(shù)組指針

數(shù)組指針是指向數(shù)組的指針。例如:int

(*a_p)[5];等效于下列定義方式:①typedefintI_A[5];②I_A*a_p;數(shù)組指針數(shù)組與函數(shù)

數(shù)組名是一個(gè)地址,不能當(dāng)作一個(gè)左值,但是可以作為函數(shù)的形參,接受實(shí)參傳送來(lái)的地址。當(dāng)形參接受實(shí)參傳送來(lái)的地址后,形參數(shù)組與實(shí)參共享內(nèi)存中的一塊空間。函數(shù)體通過(guò)形參對(duì)數(shù)組內(nèi)容的改變會(huì)直接作用到實(shí)參上。數(shù)組名作為形參是數(shù)組應(yīng)用的一個(gè)重要方面。

數(shù)組與函數(shù)數(shù)組名是一個(gè)地址,不能當(dāng)舉例

voidfunc(inta[],intn){ inti; for(i=0;i<n;i++) a[i]+=3;}voidmain(){ inta[]={1,2,3,4}; func(a,4); }

舉例voidfunc(inta[],intn)指向函數(shù)的指針

在程序運(yùn)行時(shí),不僅數(shù)據(jù)要占用內(nèi)存空間,程序的代碼也被調(diào)入內(nèi)存并占據(jù)一定的內(nèi)存空間。每一個(gè)函數(shù)都有函數(shù)名,實(shí)際上,這個(gè)函數(shù)名就是該函數(shù)的代碼在內(nèi)存的起始地址。

當(dāng)調(diào)用一個(gè)函數(shù)時(shí),編譯系統(tǒng)就是根據(jù)函數(shù)名找到函數(shù)代碼的首地址,從而執(zhí)行這段代碼。由此看來(lái),函數(shù)的調(diào)用形式:函數(shù)名(參數(shù)表),其實(shí)質(zhì)就是:函數(shù)代碼首地址(參數(shù)表)。函數(shù)指針:

就是指向某個(gè)函數(shù)的指針,它是專門用于存放該函數(shù)代碼首地址的指針變量。一旦定義了某個(gè)函數(shù)指針,那么,它就與函數(shù)名有同樣的作用,在程序中就可以象使用函數(shù)名一樣,通過(guò)指向該函數(shù)的指針來(lái)調(diào)用該函數(shù)。指向函數(shù)的指針在程序運(yùn)行時(shí),不僅數(shù)據(jù)要占用內(nèi)函數(shù)指針的定義語(yǔ)法形式如下:其中:數(shù)據(jù)類型為函數(shù)指針?biāo)负瘮?shù)的返回值類型;形參表則列出了該指針?biāo)负瘮?shù)的形參類型和個(gè)數(shù)。函數(shù)指針名與*外面的圓括號(hào)()是必須的,如果去掉圓括號(hào),將被解釋為函數(shù)的返回值為指針。

數(shù)據(jù)類型(*函數(shù)指針名)(形參表);

函數(shù)指針的定義語(yǔ)法形式如下:數(shù)據(jù)類型(*函數(shù)指針名)(形

函數(shù)指針在使用之前也要進(jìn)行賦值,使指針指向一個(gè)已經(jīng)存在的函數(shù)代碼的起始地址。語(yǔ)法形式為:

函數(shù)指針名=函數(shù)名;

調(diào)用函數(shù)指針指向的函數(shù)有如下兩種格式:

①函數(shù)指針名(實(shí)參表); ②(*函數(shù)指針名)(實(shí)參表);

例如:

intadd(inta,intb);//定義函數(shù)

int(*fptr)(inta,intb);//定義函數(shù)指針

fptr=add;//函數(shù)指針賦值函數(shù)指針在使用之前也要進(jìn)行賦值,使指針指向一個(gè)已經(jīng)存在的采用下列任何一種形式調(diào)用函數(shù)add:

add(1,2);

(*fptr)(1,2);

fptr(1,2);說(shuō)明:雖然三種調(diào)用形式的結(jié)果完全相同,當(dāng)用指向函數(shù)的指針調(diào)用函數(shù)add()時(shí),習(xí)慣上使用

(*fptr)(1,2),因?yàn)檫@種形式能更直觀地說(shuō)明是用指向函數(shù)的指針來(lái)調(diào)用函數(shù)。采用下列任何一種形式調(diào)用函數(shù)add:說(shuō)明:多重指針

如果已經(jīng)定義了一個(gè)指針類型,我們?cè)俣x一個(gè)指針,用于指向已經(jīng)定義的指針變量,后面定義的指針變量就是一個(gè)指向指針的指針變量,簡(jiǎn)稱指向指針的指針,這樣的指針也稱二重(級(jí))指針。三重及以上的指針統(tǒng)稱為多重指針。例如:

int**pp;

定義了一個(gè)二級(jí)指針變量,等效于下列定義方式:

typedefint*P;P*p;

例:inta,*p,**pp;p=&a;pp=&p; 多重指針如果已經(jīng)定義了一個(gè)指針類型,我們?cè)俣▌?dòng)態(tài)存儲(chǔ)分配和釋放存儲(chǔ)空間C的做法 void* malloc(size_tsize); void free(void*pMemory);例如: char*p=(char*)malloc(100); strcpy(p,”HelloWorld!”); free(p);注意:這里是以字節(jié)計(jì)算的單元數(shù)目2022/12/2187動(dòng)態(tài)存儲(chǔ)分配和釋放存儲(chǔ)空間C的做法注意:這里是以字節(jié)計(jì)算的單C++的做法使用運(yùn)算符new和delete使用形式

type是一個(gè)數(shù)據(jù)類型名,p是該類型的指針變量,new的作用就是從堆空間中分配一塊與type類型的數(shù)據(jù)一樣大小的內(nèi)存(如果分配失敗,new返回一個(gè)空指針),該內(nèi)存地址被存于指針p中。一旦不想再使用,可以用delete來(lái)釋放該內(nèi)存空間。type*p;p=newtype;deletep;2022/12/2188C++的做法使用運(yùn)算符new和deletetype是一舉例int*p;p=newint;*p=50;deletep;2022/12/2189舉例int*p;2022/12/1934幾點(diǎn)注意使用new申請(qǐng)的內(nèi)存空間是沒有名字的,只能通過(guò)指針間接訪問它們。用delete釋放的內(nèi)存空間必須是由new分配的空間,否則執(zhí)行delete時(shí)將會(huì)導(dǎo)致嚴(yán)重的錯(cuò)誤。例如:int*p;deletep;//出錯(cuò)int*p,value;p=&value;deletep;//出錯(cuò)2022/12/2190幾點(diǎn)注意使用new申請(qǐng)的內(nèi)存空間是沒有名字的,只能通過(guò)指針間new和delete的典型用法動(dòng)態(tài)分配和釋放單個(gè)數(shù)據(jù)的存儲(chǔ)區(qū)#include<iostream.h>voidmain(){ int*p;p=newint; if(p==NULL){ cout<<“Allocationfailure!\n”; }else{ *p=15; cout<<*p; deletep; }}pp152022/12/2191new和delete的典型用法動(dòng)態(tài)分配和釋放單個(gè)數(shù)據(jù)的存儲(chǔ)區(qū)用new運(yùn)算符初始化單個(gè)數(shù)據(jù)的存儲(chǔ)區(qū)語(yǔ)法為:type*p;P=newtype(初始值);……deletep;幾點(diǎn)說(shuō)明:是用小括號(hào)將初始值括起來(lái)。初始值可以是常量、變量、以及表達(dá)式。2022/12/2192用new運(yùn)算符初始化單個(gè)數(shù)據(jù)的存儲(chǔ)區(qū)語(yǔ)法為:type*p;舉例#include<iostream.h>voidmain(){ int*p;

p=newint(100); if(p==NULL){ cout<<“Allocationfailure!\n”; }else{ cout<<*p; deletep; }}//如果p=newint(98.5),會(huì)怎么樣?注意:初始值必須與相應(yīng)類型一致。p1002022/12/2193舉例#include<iostream.h>注意:初始值必動(dòng)態(tài)分配一維數(shù)組的存儲(chǔ)空間語(yǔ)法為:type*p;P=newtype[num];……delete[]p;幾點(diǎn)說(shuō)明:num用于指定數(shù)組大小,可以是常量、變量、以及表達(dá)式,并且用中括號(hào)括起來(lái)。通過(guò)p[i]的方式訪問數(shù)組元素。2022/12/2194動(dòng)態(tài)分配一維數(shù)組的存儲(chǔ)空間語(yǔ)法為:type*p;幾點(diǎn)說(shuō)明:#include<iostream.h>voidmain(){ inti,*p;

p=newint[100]; if(p==NULL){ cout<<“Allocationfailure!\n”; }else{ for(i=0;i<100;i++)

p[i]=i+1; for(i=0;i<100;i++) cout<<p[i]<<‘‘;

delete[]p; }}p1100Unit99…Unit02022/12/2195#include<iostream.h>p1100Unit幾點(diǎn)說(shuō)明:new返回的指針指向數(shù)組的起始位置,也就是數(shù)組的第一個(gè)元素。用new動(dòng)態(tài)分配一個(gè)數(shù)組時(shí)不能對(duì)它進(jìn)行初始化。(呵呵,為什么??)2022/12/2196幾點(diǎn)說(shuō)明:2022/12/1941引用Reference簡(jiǎn)單地說(shuō),引用就是給一個(gè)單元起一個(gè)別名。也就是說(shuō),引用與它所引用的變量共享存儲(chǔ)單元。引用主要有以下三種用法:獨(dú)立引用作為函數(shù)參數(shù)作為函數(shù)返回類型2022/12/2197引用Reference簡(jiǎn)單地說(shuō),引用就是給一個(gè)單元起一個(gè)別獨(dú)立引用inti=0,k=8;int&j=i;int*p=&i;j=k;0ijpj是i的引用,i和j是代表同一個(gè)單元。這種使用引用的方式稱為獨(dú)立引用。在聲明獨(dú)立引用時(shí)必須對(duì)它初始化,這種情況下的別名綁定是永久的。語(yǔ)句”j=k;”

不是試圖使j成為k的別名,而是在給j賦值,即使j的值也就是i的值等于k。2022/12/2198獨(dú)立引用inti=0,k=8;0ijpj是i的引用,i初始化獨(dú)立引用的幾種方式賦值表達(dá)式的右端是一個(gè)變量

inta; int&ra=a;賦值表達(dá)式的右端是一個(gè)常量

float&r1=1.0;//早期的C++版本 constfloat&r2=1.0;//近期C++版本定義常引用

intx=1; constint&rx=x;

rx=98;//錯(cuò)誤,只能使用rx,不能修改2022/12/2199初始化獨(dú)立引用的幾種方式賦值表達(dá)式的右端是一個(gè)變量2022/引用作為函數(shù)參數(shù)C++和C一樣,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論