了解指針與指針變量的概念_第1頁(yè)
了解指針與指針變量的概念_第2頁(yè)
了解指針與指針變量的概念_第3頁(yè)
了解指針與指針變量的概念_第4頁(yè)
了解指針與指針變量的概念_第5頁(yè)
已閱讀5頁(yè),還剩61頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1.了解指針與指針變量的概念,指針與地址運(yùn)算符,指針與數(shù)組。2.掌握一維數(shù)組的定義、初始化和訪(fǎng)問(wèn),了解多維數(shù)組的定義、初始化和訪(fǎng)問(wèn)。3.了解結(jié)構(gòu)體和共用體的定義和訪(fǎng)問(wèn)。第五章指針、數(shù)組、結(jié)構(gòu)體和共用體1第5章內(nèi)容5.1指針類(lèi)型5.2數(shù)組5.3結(jié)構(gòu)體和共用體21)地址的引入2)指針變量的定義3)指針變量的運(yùn)算4)const對(duì)指針變量的約束5.1指針類(lèi)型31)

地址的引入計(jì)算機(jī)內(nèi)存由若干存儲(chǔ)單元構(gòu)成,每個(gè)存儲(chǔ)單元有一個(gè)編號(hào);存儲(chǔ)單元的編號(hào),稱(chēng)為相應(yīng)數(shù)據(jù)的指針(地址)。在一個(gè)程序中,內(nèi)存分配的順序是從后向前,從右向左。例如,對(duì): inti;//(先聲明,放在高位) doublej;//(后聲明,放在低位)

則在內(nèi)存中的存儲(chǔ)為:5.1指針類(lèi)型高低復(fù)習(xí):變量:是機(jī)器一個(gè)內(nèi)存位置的符號(hào)名

在該內(nèi)存位置可以保存數(shù)據(jù),并可

通過(guò)符號(hào)名進(jìn)行訪(fǎng)問(wèn)。&:取地址運(yùn)算符,&a為變量a的地址。*:指針運(yùn)算符,inta=3;42)

指針變量的定義用于存儲(chǔ)其他變量的地址的變量,為指針變量。定義方法: 數(shù)據(jù)類(lèi)型*指針名;

如:inti;int*pi=&i;//定義指針變量pi,并取i的地址賦給pi

即指針變量其名為pi,其值為&i注意①使用變量名不帶*號(hào),指針名帶*表示取值。②指針的數(shù)據(jù)類(lèi)型與所指的數(shù)據(jù)類(lèi)型相同;③指針可以動(dòng)態(tài)的,(可在指向一個(gè)變量后,再指向其他變量)。5.1指針類(lèi)型52)指針變量的定義與使用 inta=2,b=3; int*pa,*pb; pa=&a;pb=&b;

或int*pa=&a,*pb=&b;規(guī)則:指針運(yùn)算符*表示“指向(的值)”定義時(shí):int*pa=&a;//定義指針變量pa,并取a的地址賦給pa使用時(shí):*pa表示指針變量pa(其值為地址)所指向的變量(值)。

(1)*pa可與a相互代替,*pa能訪(fǎng)問(wèn)a的值。

如:*pa=1;//等同于a

=1;*pb=2;//等同于b

=2;

(2)指針變量使用前須先賦初值,且只能賦值為具體有效的地址.inta=2,b=3;int*pa,*pb;然后

*pa=a;或*pa=1;

//不行!

pa=&a;pb=&b;//賦初值接著*pa=a;*pa=1;//OK*pa=*pb//ok,將b地址中的值,賦給a地址指向的空間pa=pb;//指針變量可用另一個(gè)指針變量賦值6//源程序:2_2.cpp#include<iostream.h>intmain(){ inta=2,b=3; int*pa,*pb; pa=&a; pb=&b; cout<<"&a="<<&a<<"&b="<<&b<<endl; cout<<"pa="<<pa<<"pb="<<pb<<endl; return0;}5.1指針類(lèi)型7//問(wèn)題:指針的引用//源程序:5_3.cpp//#include<iostream.h>intmain(){ inta=2,b=3; int*pa,*pb; pa=&a;//指針變量的賦值 pb=&b;// cout<<"a="<<a<<"b="<<b<<endl; cout<<“*pa=”<<*pa<<“*pb=”<<*pb<<endl;//間接訪(fǎng)問(wèn) *pa=1; //向pa所指向的變量賦值 *pb=*pa; //向pb所指向的變量賦值

cout<<"a="<<a<<"b="<<b<<endl; return0;}指針變量可用另一個(gè)指針變量賦值。pa=pb;8//問(wèn)題:指針變量的應(yīng)用//源程序:5_4.cpp#include<iostream.h>intmain(){ inta=2,b=3; int*pa,*pb,*max; pa=&a; pb=&b; if(a>b)max=&*pa; elsemax=&*pb; cout<<"max="<<*max<<endl; return0;}93)指針變量的運(yùn)算

指針變量的運(yùn)算包括:(1)單指針變量的運(yùn)算(2)指針間的減法(3)指針間的比較5.1指針類(lèi)型10(1)單指針變量的運(yùn)算。指針使用前,必須檢查其是否為空如對(duì)int*p;

用 if(p==NULL)來(lái)判斷是否為空。指針變量的單目運(yùn)算p+n表示找到與當(dāng)前指針偏移n個(gè)內(nèi)存地址偏移量的位置。(p本身的值保持不變)示例1:inta,b,c;

int*pc=&c;

則pc+1//找到位置&b

pc+2//找到位置&a5.1指針類(lèi)型11//問(wèn)題:?jiǎn)沃羔樳\(yùn)算//源程序:5_5.cpp#include<iostream.h>intmain(){ inta1=1,a2=2,a3=3,a4=4; int*pi=&a3; //pi指向a3的地址 doubleb1=0.1,b2=0.2,b3=0.3,b4=0.4; double*pd=&b1; //pd指向b1的地址 cout<<"a1="<<*(pi+2) <<"a2="<<*(pi+1) <<"a3="<<*pi <<"a4="<<*(pi-1)<<endl; cout<<"b1="<<*pd--;

//顯示pd所指向的變量的值,再執(zhí)行pd=pd-1; cout<<"b2="<<*pd--; cout<<"b3="<<*pd--; cout<<"b4="<<*pd<<endl; return0;}5.1指針類(lèi)型12(2)指針間的減法inta=1,b=2,c=3,d=4; int*pa=&a; int*pb=&d;

pa-pb結(jié)果是3單位為int的長(zhǎng)度,即地址相差3×4=12字節(jié)。注意的是兩指針的相加、乘、除以,一般是無(wú)意義。5.1指針類(lèi)型13(3)指針間的比較一般地對(duì)變量:

先聲明的變量,比后聲明的變量,地址值大;指針的關(guān)系運(yùn)算

同類(lèi)型的指針,可進(jìn)行關(guān)系運(yùn)算

可用關(guān)系運(yùn)算符號(hào)!=、==、<、<=、>=、>5.1指針類(lèi)型14(3)指針間的比較//示例25-7—

#include<iostream.h>intmain(){ inta=1,b=2,c=3; int*pa=&a; int*pc=&c; if(pa!=NULL)cout<<"pa!=NULL"<<endl; cout<<“pa=”<<pa<<“pc=”<<pc<<endl;//相差6*4=24個(gè)字節(jié) if(pa>pc)cout<<"pa>pc"<<endl; elsecout<<"pa<=pc"<<endl; return0;}5.1指針類(lèi)型15總結(jié)對(duì)變量

inta=3;int&refa=a;int*pa=&a;變量a的值的三種修改途徑

a=5;//變量自己refa=5;//通過(guò)引用*pa=5;//通過(guò)指針5.1指針類(lèi)型164.2.4指針參數(shù)函數(shù)定義中,形參定義成指針類(lèi)型變量;指針參數(shù)的函數(shù)調(diào)用將實(shí)參地址賦給形參。與引用傳遞一樣,函數(shù)執(zhí)行中,會(huì)將形參和實(shí)參一同修改.示例

intadd(int*x,int*y)//函數(shù)聲明

add(&a,&b)//函數(shù)調(diào)用

add(&12,&13);//錯(cuò)誤,常量不能找到地址,傳不過(guò)去

4.2函數(shù)參數(shù)的傳遞17//問(wèn)題:測(cè)試指針參數(shù)

//源程序4_8.cpp#include<iostream.h>voidswap(int*,int*);intmain(){ intm=10,n=20; cout<<"m="<<m<<'\t'<<"n="<<n<<endl; swap(&m,&n);//將實(shí)際參數(shù)的地址傳遞給形式參數(shù)

cout<<"m="<<m<<'\t'<<"n="<<n<<endl; return0;}voidswap(int*a,int*b)//交換兩個(gè)參數(shù)值,利用引用參數(shù){ intc=0;

c=*a;

//讀地址a中的值

*a=*b;

//將b地址中的值,賦給a地址指向的空間 *b=c;}184.4函數(shù)的指針1)函數(shù)的地址2)函數(shù)的指針194.4函數(shù)指針1)函數(shù)的地址函數(shù)被編譯成二進(jìn)制碼存入內(nèi)存,存儲(chǔ)函數(shù)的空間的首地址,稱(chēng)為函數(shù)地址.函數(shù)地址,是執(zhí)行函數(shù)的入口.三種形式來(lái)調(diào)用函數(shù):

max(a,b);//函數(shù)名調(diào)用

(&max)(a,b);//地址調(diào)用

(*&max)(a,b);//間接地址調(diào)用20//問(wèn)題:函數(shù)地址的測(cè)試//源程序4_12.cpp#include<iostream.h>intmax(intx,inty);intmain(intargc,char*argv[]){ intx=0,y=0,z=0; x=max(5,3);//函數(shù)名調(diào)用

y=(&max)(5,3);//地址形式調(diào)用

z=(*&max)(5,3);//間接地址調(diào)用

cout<<"x=max(5,3)"<<'\t'<<"x="<<x<<endl;//結(jié)果打印

cout<<"y=(&max)(5,3)"<<'\t'<<"y="<<y<<endl; cout<<"z=(&max)(5,3)"<<'\t'<<"z="<<z<<endl; cout<<"max的入口地址是:"<<max<<endl;//地址值打印

cout<<"&max的入口地址是:"<<&max<<endl; cout<<"*&max的入口地址是:"<<*&max<<endl; return0;}intmax(intm,intn)//比較大小{ if(m>n)returnm; elsereturnn;}212)函數(shù)的指針指針,用語(yǔ)存儲(chǔ)其他數(shù)據(jù)的地址.利用指針,可操作地址;函數(shù)指針和數(shù)據(jù)指針一樣,要先定義后使用。示例定義一個(gè)char(int)類(lèi)型的函數(shù)指針tr,就可以這樣表示:

char(*tr)(int); (*tr)的括號(hào)在這里不能省,因?yàn)樵谶@里只是定義一個(gè)函數(shù)指針,不是聲明一個(gè)函數(shù)。4.4函數(shù)指針22//問(wèn)題:函數(shù)指針的使用

//源程序4_13.cpp#include<iostream.h>

doublesquarePerimeter(double);//正方形的周長(zhǎng)doublesquareArea(double);//正方形的面積doublecubeArea(double);//立方體的面積doublecubeVolume(double);//立方體的體積23intmain(intargc,char*argv[]){ double(*fp)(double);//定義函數(shù)指針

doublesL=5;//初始化邊長(zhǎng)

doublesP,sA,cA,cV; fp=squarePerimeter;//函數(shù)指針賦值 sP=fp(sL); fp=squareArea;//修改函數(shù)指針

sA=fp(sL); fp=cubeArea;//修改函數(shù)指針 cA=fp(sL); fp=cubeVolume;//修改函數(shù)指針 cV=fp(sL); cout<<"邊長(zhǎng)是:"<<sL<<endl; cout<<"正方形的周長(zhǎng)是:"<<sP<<endl; cout<<"正方形的面積是:"<<sA<<endl; cout<<"正方體的面積是:"<<cA<<endl; cout<<"正方體的體積是:"<<cV<<endl; return0;}24doublesquarePerimeter(doublesideLength){ returnsideLength*4;}doublesquareArea(doublesideLength){ returnsideLength*sideLength;}doublecubeArea(doublesideLength){ returnsideLength*sideLength*6;}doublecubeVolume(doublesideLength){ returnsideLength*sideLength*sideLength;}25char(*tr)(int);//tr為指向函數(shù)的指針,該函數(shù)返回一個(gè)字符char*tr(int);tr為返回一個(gè)指針的函數(shù),該指針指向字符型數(shù)據(jù)#include<iostream.h>char*fun(chartt[]){for(inti=0;tt[i];i++) { if((tt[i]>'a')&&(tt[i]<'z')) tt[i]-=32; }

return(tt);

}voidmain(){chartt[81];cout<<"Pleaseenterastring:";cin>>tt;cout<<"Theresultstringis:"<<fun(tt)<<endl;}函數(shù)指針與返回指針類(lèi)型的函數(shù)264)const的約束通過(guò)添加const關(guān)鍵詞,可對(duì)指針中的地址值,或指針地址中的數(shù)據(jù)內(nèi)容,規(guī)定為不變。(1)指向常量的指針無(wú)論指向哪個(gè)數(shù)據(jù),都以“只讀”的形式指向,即不能用指針變量的間接形式去修改數(shù)據(jù)。格式

const

數(shù)據(jù)類(lèi)型*指針變量名

//格式1

數(shù)據(jù)類(lèi)型

const

*指針變量名 //格式2舉例

constint*pi;//也可書(shū)寫(xiě)為intconst*pi; inta=22; pi=&a;//可以指向變量,但不允許通過(guò)指針去修改 *pi=2;//錯(cuò)誤5.1指針類(lèi)型274)const的約束(2)指針常量

指針常量,是指在初始化后,不能再修改它的指向。格式

數(shù)據(jù)類(lèi)型*const

指針變量名舉例

inta=22;

int*constp=&a;//p的指向已固定在變量a上 intb=33; p=&b;//錯(cuò)誤5.1指針類(lèi)型284)const的約束(3)指向常量的指針常量

指針本身和所指對(duì)象的值,在定義之后都限制為只讀的指針。

既不能通過(guò)指針去修改指向的變量的值,又不能更改指向格式

const數(shù)據(jù)類(lèi)型

*const

指針變量名

//格式1

數(shù)據(jù)類(lèi)型const

*const

指針變量名//格式2舉例

constint*constp=&b;

intconst*constp=&b;5.1指針類(lèi)型295.2數(shù)組定義用一個(gè)名稱(chēng),表示一組數(shù)據(jù)類(lèi)型相同,并連續(xù)存儲(chǔ)的多個(gè)數(shù)據(jù)的集合。包括1)一維數(shù)組2)多維數(shù)組3)字符數(shù)組和字符串4)指針數(shù)組301)一維數(shù)組(1)定義定義格式

數(shù)據(jù)類(lèi)型數(shù)組名[長(zhǎng)度表達(dá)式];示例inta[5];doubleb[10];intc[‘0’];//c有48個(gè)元素注意①數(shù)組長(zhǎng)度必須是整型表達(dá)式。②C++中,數(shù)組下標(biāo)從0開(kāi)始。長(zhǎng)度為n的數(shù)組,下標(biāo)從0到n-1。對(duì)a,其元素依次為a[0]a[1],…,a[4]5.2數(shù)組311)一維數(shù)組(2)初始化數(shù)組可在定義時(shí)依次對(duì)元素賦值,并可省略長(zhǎng)度。

inta[3]={1,2,3};//等同于inta[]={1,2,3};

inta[3]={1,2,3,4};//錯(cuò)誤,下標(biāo)超過(guò)數(shù)組長(zhǎng)度也可定義后,按下標(biāo),對(duì)每個(gè)元素賦值。

inta[3];a[0]=1;a[1]=2;a[2]=3;

注意未初始化的確數(shù)組元素,會(huì)被賦一個(gè)隨機(jī)數(shù)。示例:書(shū)上代碼5_85.2數(shù)組32//問(wèn)題:數(shù)組的定義與初始化//源程序:5_8.cpp#include<iostream.h>intmain(){ inta[3]={1,2,3};intb[3]={1};inti;

doubled[3]; d[0]=1.1;d[1]=2.2;d[2]=3.3;

staticinte[4];

//對(duì)靜態(tài)數(shù)組,自動(dòng)初始化

constintf[2]={10,20}; //const約束的數(shù)組

cout<<"arraya:";

for(i=0;i<=2;i++)

cout<<a[i]<<"";cout<<endl;//顯示a數(shù)組元素 cout<<"arrayb:";

for(i=0;i<3;i++)cout<<b[i]<<"";cout<<endl;//顯示b數(shù)組元素 cout<<"arrayd:";

for(i=0;i<3;i++)cout<<d[i]<<"";cout<<endl;//顯示d數(shù)組元素 cout<<"arraye:";

for(i=0;i<4;i++)cout<<e[i]<<"";cout<<endl;//顯示e數(shù)組元素 return0;}331)一維數(shù)組(3)數(shù)組訪(fǎng)問(wèn)

訪(fǎng)問(wèn)方式1通過(guò)數(shù)組名加下標(biāo)訪(fǎng)問(wèn)。

inta[3]={1,2,3};

a[0]+=1;cout<<a[3];//超出數(shù)組長(zhǎng)度,編譯器不檢查,給出任意值示例:書(shū)上代碼5_9

訪(fǎng)問(wèn)方式2

數(shù)組名是數(shù)組的指針,并指向第1個(gè)元素的首地址??赏ㄟ^(guò)數(shù)組名加偏移量的方式來(lái)讀數(shù)據(jù)(數(shù)組名指針是常指針)。

inta[3]={1,2,3};cin>>*(a+1);

//輸入第2個(gè)元素的值示例:書(shū)上代碼5_105.2數(shù)組34/問(wèn)題:以數(shù)組下標(biāo)訪(fǎng)問(wèn)//源程序:5_9.cpp//#include<iostream.h>intmain(){ inta[10]; inti; for(i=0;i<10;i++)

a[i]=i;//寫(xiě)入 for(i=0;i<10;i++) //輸出數(shù)組a的全部元素

cout<<a[i]<<“”;//讀出 cout<<endl; cout<<a[10]<<endl;//越出數(shù)組a的界限,編譯器不檢查;輸出隨機(jī)數(shù)

return0;}35以指針?lè)绞皆L(fǎng)問(wèn)數(shù)組

對(duì)inta[5]={1,2,3,4,5}; int*p=&a;//p指向a的地址

此時(shí),有 *p與a[0]相等// *(p+1)與a[1]相等 *(p+2)與a[2]相等 *(p+3)與a[3]相等 *(p+4)與a[4]相等36//問(wèn)題:以指針?lè)绞皆L(fǎng)問(wèn)數(shù)組//源程序:5_10.cpp#include<iostream.h>intmain(){ inta[]={1,2,3},*p,i; cout<<"a="<<a<<endl; //顯示指針a的數(shù)值

cout<<"&a[0]="<<&a[0]<<endl;//顯示數(shù)組a第一個(gè)元素的地址

cout<<"*a+i:";

for(i=0;i<3;i++) cout<<*a+i<<"";//使用指針a,來(lái)顯示數(shù)組元素 cout<<endl; cout<<"p[i]:";

for(i=0,p=a;i<3;i++) cout<<p[i]<<"";//使用指針變量p,加下標(biāo)來(lái)顯示數(shù)組元素 cout<<endl; cout<<“*p:”;

for(p=a;p<a+3;p++) cout<<*p<<"";//用指針變量p,間接顯示數(shù)組元素 cout<<endl; return0;}372)多維數(shù)組

多行、多列、多分枝的同類(lèi)型數(shù)據(jù)組成的集合。(1)定義

inta[2][4];//2行4列

inta[2][4][5];//2行4列5分枝多于三維的確數(shù)組,應(yīng)用較少。

(2)初始化

inta[2][4]={{1,2,3,4},{5,6,7,8}};//按行

inta[2][4]={1,2,3,4,5,6,7,8}//前4個(gè)初始化第1行,…

intb[2][2][3]={{{1,2,3},{4,5}},{{7,8,9},{10}}};5.2數(shù)組第1行第2行38//問(wèn)題:多維數(shù)組//源程序:5_11.cpp#include<iostream.h>intmain(){inti,j,k; inta[][3]={1,2,3,4,5,6,7,8,9}; intb[2][2][3]={{{1,2,3},{4,5}},{{7,8,9},{10}}};

for(i=0;i<3;i++)

{ cout<<"a["<<i<<"][j]:";

for(j=0;j<3;j++)//2維數(shù)組,用三層for循環(huán) cout<<a[i][j]<<"";//顯示數(shù)組a的各元素 cout<<endl; }

for(i=0;i<=1;i++)

for(j=0;j<=1;j++) { cout<<"b["<<i<<"]["<<j<<"][k]:";

for(k=0;k<=2;k++)//3維數(shù)組,用三層for循環(huán) cout<<b[i][j][k]<<"";//顯示數(shù)組b的各元素 cout<<endl; } return0;}393)字符數(shù)組與字符串(1)字符數(shù)組數(shù)組元素存儲(chǔ)的是單個(gè)的字符。定義和初始化方法與其他數(shù)組相同。

示例:

chara[4]={‘1’,’2’,’3’,’4’}; charb[]={‘1’,’2’}; cahrc[3]; c[0]=’a’,c[1]=’b’,c[2]=’c’; chard[][2]={{‘a(chǎn)’,’b’},{‘c’,’d’},{‘e’,’f’}};注意:為數(shù)組賦值的字符要放在單引號(hào)中。5.2數(shù)組40(2)字符串的定義一維字符數(shù)組,可用于存儲(chǔ)一個(gè)字符串。當(dāng)要用字符數(shù)組存儲(chǔ)字符串時(shí),字符串的結(jié)尾須加上’\0’;chara[12];a[0]=‘h’,a[1]=‘e’,a[2]=‘l’,a[3]=‘l’,a[4]=‘o’,a[5]=‘\0’;cout<<a<<endl;//輸出”hello”,與字符指針的輸出一樣‘\0’是指ASCⅡ碼值為0的字符,不能顯示,只代表一個(gè)“空操作”的標(biāo)記。3)字符數(shù)組與字符串5.2數(shù)組41//問(wèn)題:字符串//源程序:5_12.cpp;__字符串的定義#include<iostream.h>intmain(){ chara[10]={'H','e','l','l','o','!','\0'};

charb[12]={"CHINABOY"}; //可省略大括號(hào)// charb2[12];b="CHINABOY";//錯(cuò)誤! 不能在字符數(shù)組定義后用串對(duì)它初始化

charc[]="C++Language";

char*d="Welcome!";// char*d2={‘W’,‘e’,‘l’,‘c’,‘o’,‘m’,‘e’,‘!’,‘\0’};//錯(cuò)誤!不能用數(shù)組元素形式對(duì)字符指針初始化

char*d3;d3="Welcome!"; //正確!

chare[][15]={"Hello!","CHINABOY","C++Language"}; cout<<"arraya:"<<a<<endl; cout<<"arrayb:"<<b<<endl; cout<<"arrayc:"<<c<<endl; cout<<"arrayd:"<<d<<endl; cout<<"arrayd3:"<<d3<<endl; for(inti=0;i<3;i++) cout<<"arraye["<<i<<"]:"<<e[i]<<endl; return0;}42(3)字符數(shù)組的訪(fǎng)問(wèn)通過(guò)字符數(shù)組名,可輸入和輸出一個(gè)字符傳;通過(guò)字符數(shù)組加下標(biāo),可以輸入和輸出單個(gè)字符。

chara[3]={“h!”}//整個(gè)輸入cin>>a[0];//單個(gè)輸入cout<<a;//整個(gè)輸出cout<<a[0];//單個(gè)輸出3)字符數(shù)組與字符串5.2數(shù)組43用字符指針存儲(chǔ)字符串

char*p=newchar[10];p=“astring”;cin>>p;//輸入字符串cout<<p;//輸出字符串示例見(jiàn)書(shū)代碼5-1344(4)字符串處理函數(shù)

intstrlen(s)

返回字符指針的字符串長(zhǎng)度

char*p="\n\12'value'\n";cout<<strlen(p)<<endl;

char*strcat(s1,s2)

將字符指針s2添加到字符指針s1的后面,返回s1char*strcpy(s1,s2)

將字符指針s2的內(nèi)容,復(fù)制到字符指針s1中,返回strcmp(s1,s2)

上述參數(shù),可字符串?dāng)?shù)組,或字符指針。3)字符數(shù)組與字符串5.2數(shù)組45//問(wèn)題:字符串的處理函數(shù)

//源程序:_14.cpp#include<iostream.h>#include<string.h>intmain(){chars1[20]="C++",*s2="Language",*s3=newchar;//初始化cout<<"thelengthofcharacterarrays1:"<<strlen(s1)<<endl;//顯示s1的長(zhǎng)度cout<<"s1+s2:"<<strcat(s1,s2)<<endl;//s1與s2連接后賦給s1cout<<"characterarrays3:"<<strcpy(s3,s1)<<endl; //s1復(fù)制到s3intflag=strcmp(s1,s2);//比較s1與s2,結(jié)果賦給變量flagif(flag==0)cout<<"characterarrays1equaltos2";//顯示s1與s2的關(guān)系

elseif(flag>0)cout<<"characterarrays1greaterthans2"; elsecout<<"characterarrays1lessthans2"; cout<<endl; return0;}464)指針數(shù)組

存儲(chǔ)指針變量的數(shù)組,其中每個(gè)元素都是一個(gè)指針變量,需要指向相同類(lèi)型變量或?qū)ο蟮?。在?shí)際應(yīng)用中一般只使用一維指針數(shù)組。格式

數(shù)據(jù)類(lèi)型*數(shù)組名[長(zhǎng)度];

其中“[]”說(shuō)明要定義一個(gè)數(shù)組;

“*”說(shuō)明該數(shù)組的元素為指針。5.2數(shù)組474)指針數(shù)組示例1inta,b,*p[2];p[0]=&a;p[1]=&b;示例2字符指針數(shù)組

char*q[3]; q[0]="Hello!"; //指針數(shù)組元素初始化

//如未使用過(guò)q[0],則輸入前須申請(qǐng)空間q[0]=newchar[20];cin>>q[0];

q[1]="China"; q[2]="Boy."; cout<<q[0];//輸出的結(jié)果是字符串5.2數(shù)組48

1

從靜態(tài)存儲(chǔ)區(qū)域分配。內(nèi)存在程序編譯時(shí)候已經(jīng)分配好,這塊內(nèi)存在程序整個(gè)運(yùn)行期間都存在。對(duì)應(yīng)的就是:全局變量,static變量

2

從棧上創(chuàng)建。函數(shù)內(nèi)局部變量申請(qǐng)的存儲(chǔ)單元在棧上創(chuàng)建,函數(shù)結(jié)束時(shí)??臻g自動(dòng)釋放。比如:int

a;

int

*p

=

&a;

return

p;

這樣返回的地址就不知道指向的是什么東西了。

3

從堆上分配,亦稱(chēng)動(dòng)態(tài)分配。運(yùn)行時(shí)用

malloc(c語(yǔ)言中使用)或者new(c++語(yǔ)言中使用)申請(qǐng)內(nèi)存,程序員自己負(fù)責(zé)

用free或者delete釋放,因此生存期是由我們來(lái)定的。即使在函數(shù)體內(nèi)聲明的也不會(huì)隨函數(shù)結(jié)束而消失。

49//問(wèn)題:指針數(shù)組//源程序:_15.cpp#include<iostream.h>intmain(){ int*p[2]; char*q[3]; inti,a[3]={1,2,3};

p[0]=a; //指針變量p[0],指向數(shù)組

p[1]=newint[2]; //申請(qǐng)內(nèi)存空間

p[1][0]=4;p[1][1]=5;//逐個(gè)賦值 cout<<"p[0]:"; for(i=0;i<3;i++)cout<<p[0][i]<<““;//顯示p[0]指向的數(shù)組內(nèi)容,3個(gè)

cout<<endl; cout<<"p[1]:"; for(i=0;i<2;i++)cout<<p[1][i]<<“”;//顯示p[1]指向的內(nèi)容,2個(gè) cout<<endl; cout<<"q:";

q[0]="Hello!";q[1]="China";q[2]="Boy.";//指針數(shù)組元素初始化

for(i=0;i<3;i++)cout<<q[i]<<"";//顯示指針數(shù)組元素所指向的內(nèi)容

cout<<endl; return0;}5.2數(shù)組50

指針的類(lèi)型:指針類(lèi)型,是它指向的變量的數(shù)據(jù)類(lèi)型。可以是:

基本類(lèi)型:int,char,…

非基本類(lèi)型:結(jié)構(gòu),對(duì)象,以及指針等。。

(指向指針的指針,又稱(chēng)二級(jí)指針)51inti=4;int*p1=&i;int**p2=&p1;指向指針的指針變量定義:

類(lèi)型標(biāo)識(shí)符**指針變量名例如:int**ptr;其含義為定義一個(gè)指針變量ptr,它指向另一個(gè)指針變量(該指針變量又指向一個(gè)實(shí)型變量)。由于指針運(yùn)算符“*”是自右至左結(jié)合,所以上述定義相當(dāng)于:int*(*ptr);4i&ip1&p1p2指向指針的指針52#include<iostream.h>main(){ inta[10]={1,2,3,4,5,6,7}; intb[3][4]={{1,2,3,4},{5,6},{8,8,10,11}};int*p1,*p2,**p3,i,j;//*p3是指向指針的指針變量

for(p1=a,p3=&p1,i=0;i<10;i++)cout<<*(*p3+i)<<"";//用指向指針的指針變量輸出一維數(shù)組

cout<<endl;p3=b;for(i=0;i<3;i++)//用指向指針的指針變量輸出二維數(shù)組

{//p2=b[i];//p3=&p2;for(j=0;j<4;j++)cout<<*(*p3+j)<<"";cout<<endl;}}指向指針的指針535.3結(jié)構(gòu)和共用體1)結(jié)構(gòu)的定義2)訪(fǎng)問(wèn)結(jié)構(gòu)成員3)結(jié)構(gòu)賦值4)結(jié)構(gòu)與指針5)共用體的定義6)共用體變量的引用541)結(jié)構(gòu)的定義結(jié)構(gòu)是一種自定義數(shù)據(jù)類(lèi)型,用于多個(gè)不同類(lèi)型數(shù)據(jù),共同表達(dá)某一對(duì)象信息的情況。定義格式struct[結(jié)構(gòu)體名]{

數(shù)據(jù)類(lèi)型1成員1;

數(shù)據(jù)類(lèi)型2成員2;

數(shù)據(jù)類(lèi)型n成員n;}[結(jié)構(gòu)體變量名];

省略“結(jié)構(gòu)體名”時(shí),表示說(shuō)明一個(gè)無(wú)名結(jié)構(gòu);省略“結(jié)構(gòu)變量名”,表示暫時(shí)不定義具有該類(lèi)型的變量。5.3結(jié)構(gòu)和共用體551)結(jié)構(gòu)的定義示例structstudent{

intnum; //學(xué)號(hào)4字節(jié)

charname[10]; //姓名10字節(jié)

charsex; //性別1字節(jié)

charsclass[20]; //所在班級(jí)20字節(jié)

intage; //年齡4字節(jié)

};

studentstd;//定義一個(gè)結(jié)構(gòu)變量std;

cout<<sizeof(student);//輸出40字節(jié),采用最大成員數(shù)據(jù)類(lèi)型的倍數(shù)5.3結(jié)構(gòu)和共用體562)結(jié)構(gòu)成員的訪(fǎng)問(wèn)結(jié)構(gòu)體變量名.成員名示例structstudent{

intnum; //學(xué)號(hào)4字節(jié)

charname[10]; //姓名10字節(jié)

charsex; //性別1字節(jié)

charsclass[20]; //所在班級(jí)20字節(jié)

intage; //年齡4字節(jié)

}std={19,"liuyang",’Y’,"2class",18};

cout<<<<endl;5.3結(jié)構(gòu)和共用體573)結(jié)構(gòu)的賦值 structstudent//書(shū)上代碼5-16的主函數(shù)部分 { intnum; //學(xué)號(hào) charname[10]; //姓名 charsex; //性別 intage; //年齡 structdata //入學(xué)時(shí)間 { intyear; //年 intmonth; //月 intday; //日 }sdata; }s1={2001,"LiMing",'m',21,{2007,9,1}};//同時(shí)定義變量并初始化

students2; s2.num=2002;//逐個(gè)賦值 strcpy(,"JiangTao"); s2.sex='m'; s2.age=22;

s2.sdata.year=2007;

s2.sdata.month=9;

s2.sdata.day=1;5.3結(jié)構(gòu)和共用體584)結(jié)構(gòu)與指針

指向結(jié)構(gòu)變量地址的指針變

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論