《C語言程序設(shè)計(jì)》課件第七章11_第1頁(yè)
《C語言程序設(shè)計(jì)》課件第七章11_第2頁(yè)
《C語言程序設(shè)計(jì)》課件第七章11_第3頁(yè)
《C語言程序設(shè)計(jì)》課件第七章11_第4頁(yè)
《C語言程序設(shè)計(jì)》課件第七章11_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

-C語言程序電子教案算法語言程序設(shè)計(jì)第七章指針

主要內(nèi)容:指針的概念指針運(yùn)算指針與函數(shù)參數(shù)指針與數(shù)組字符指針和字符串函數(shù)型指針指針型指針指針功能

指針是一種構(gòu)造類型數(shù)據(jù),利用指針可以有效地表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu),動(dòng)態(tài)地分配內(nèi)存,方便地使用字符串和數(shù)組,靈活地實(shí)現(xiàn)函數(shù)間的數(shù)據(jù)傳遞,直接處理內(nèi)存地址等。掌握指針的應(yīng)用,可以使算法表達(dá)更確切,程序更清晰簡(jiǎn)煉,代碼更緊湊有效。7.1指針的概念7.1.1存儲(chǔ)單元的地址與內(nèi)容

程序一旦被執(zhí)行,則該程序的指令、常量和變量等都要存放在機(jī)器的內(nèi)存中。內(nèi)存是以字節(jié)來劃分存儲(chǔ)單元的,每個(gè)字節(jié)都有一個(gè)編號(hào),這就是存儲(chǔ)單元的“地址”。在計(jì)算機(jī)中,根據(jù)內(nèi)存的地址,就可以訪問存儲(chǔ)在該單元中的數(shù)據(jù)。將某存儲(chǔ)單元中的數(shù)據(jù)稱為這個(gè)存儲(chǔ)單元的“內(nèi)容”。存儲(chǔ)單元的地址與內(nèi)容如下圖所示。圖7.1…..26518…...內(nèi)存1000100210042010變量a變量b變量c變量i7.1.2指針和指針變量?jī)?nèi)存變量的三個(gè)基本特征:變量名、變量的內(nèi)容和變量的存儲(chǔ)地址。要訪問一個(gè)變量,可以有兩種方式:用變量名;用變量的地址。7.1.3指針變量的定義指針變量使用前應(yīng)先定義。定義格式:

類型標(biāo)識(shí)符*標(biāo)識(shí)符說明:

標(biāo)識(shí)符是被定義的指針變量的名字。

類型標(biāo)識(shí)符則表明了該指針變量所指向變量的類型。例如:int*p;char*ch;7.1.4指針運(yùn)算符和指針變量的引用1.運(yùn)算符

&取地址運(yùn)算符運(yùn)算格式:&標(biāo)識(shí)符*指針運(yùn)算符(間接訪問運(yùn)算符)

運(yùn)算格式:*指針變量例如:

int*p,i,j;…p=&i;j=*p;表示把變量i的地址賦給指針變量p表示將指針變量所指向的變量i的內(nèi)容賦給變量j2.指針變量的引用

指針變量一經(jīng)定義,可以像其它基本類型變量一樣引用。

(1)指針變量只接收地址,例如:

int*pi,*pj,*pk,i,j,k;…pi=&i;pj=&j;pk=&k;

(2)指針變量指向變量后,可以像其它基本類

型變量一樣引用。例如:int*pi,*pj,i,j;pi=&i;pj=&j;*pi=0;/*等價(jià)于i=0;*/*pj+=1;/*等價(jià)于j+=1;*/*(pi)++;/*等價(jià)于i++;*/切記:指針變量引用前必須指向某個(gè)變量。例如:

#include〈stdio.h〉voidmain(){int*p;*p=100;/*錯(cuò)*/printf("%d\n",*p);}(3)指向同類型的指針變量之間可以相互賦值例如:pi=pj;注意:對(duì)于指針變量pi和pj,下面兩種賦值的效果是不等價(jià)的。

pi=pj;和*pi=*pj;(4)如果指針變量pi已經(jīng)指向變量i,那么:

&*pi與&i等價(jià)。因?yàn)閮蓚€(gè)運(yùn)算符的優(yōu)先級(jí)別相同,按自右向左方向結(jié)合,先進(jìn)行*pi運(yùn)算,它就是變量i,再進(jìn)行&運(yùn)算,所以&*pi與&i等價(jià)。

(5)若i是一變量,則*&i與i等價(jià)。

因?yàn)橄冗M(jìn)行&i運(yùn)算,其結(jié)果是地址,再進(jìn)行*運(yùn)算,相當(dāng)于取這個(gè)地址中的內(nèi)容,即i的值。故*&I與i等價(jià)。

(6)指針變可以用存儲(chǔ)類型說明,對(duì)于被說明為靜態(tài)的和外部的指針變量可以被賦初值(初始化)。例如:int*p,i,*pi=&i;#include〈stdio.h〉voidmain(){staticchara[10],*pa=a;…}

(7)指針變量可以指向任何類型變量,其中

包括其他的指針變量。例如:inti,*pi,**ppi;…pi=&i;ppi=π…指向指針變量的指針變量ppi指針變量pi變量i200010002000地址20001000地址1000

(8)指針變量可以賦“空”值,其含義是該

指針變量不指向任何變量。

“空”值通常作為指針的異常標(biāo)志。用NULL表示,即全部二進(jìn)位均為0值。NULL其實(shí)就是0,但習(xí)慣上不用0而用NULL,辦法是通過#define定義。例如:

#defineNULL0#include〈stdio.h〉voidmain(){inti,*p;p=NULL;…p=i;…if(p==NULL)printf("pointerpisNULL");…}

(9)一個(gè)指針變量的值為NULL與未對(duì)該指針

變量賦值是不同的。

前者是有值的,其值為0,稱“空值”,它表示不指向任何變量;而后者雖未對(duì)指針變量賦值,但并不等于該指針變量無值,只是它的值是一個(gè)不確定的值,即該指針變量正指向某個(gè)未知的單元。這時(shí),程序若引用這個(gè)指針變量,顯然是很危險(xiǎn)的。所以,在引用一個(gè)指針變量前,必須先要對(duì)它賦值。3指針變量引用舉例

【例7.1】觀察指針變量pi和pj構(gòu)成的語句(pi=pj;*pi=*pj;)之異同。#include〈stdio.h〉voidmain(){inti,j,*pi,*pj;scanf("%d,%d",&i,&j);pi=&i;pj=&j;printf("i=%d,j=%d\n",i,j);printf("*pi=%d,*pj=%d\n",*pi,*pj);printf("pi=%u,pj=%u\n",pi,pj);pi=pj;printf("i=%d,j=%d\n",i,j);printf("*pi=%d,*pj=%d\n",*pi,*pj);printf("pi=%u,pj=%u\n",pi,pj);pi=&i;pj=&j;*pi=*pj;printf("i=%d,j=%d\n",i,j);printf("*pi=%d,*pj=%d\n",*pi,*pj);printf("pi=%u,pj=%u\n",pi,pj);}程序運(yùn)行結(jié)果如下:2,8i=2,j=8*pi=2,*pj=8pi=65494,pj=65496i=2,j=8*pi=8,*pj=8pi=65496,pj=65496i=8,j=8*pi=8,*pj=8pi=65494,pj=65496【例7.2】輸入a、b兩個(gè)整數(shù),經(jīng)比較后,按大小順序輸出a和b。#include〈stdio.h〉voidmain(){int*pi,*p2,*p,a,b;scanf("%d,%d",&a,&b);p1=&a;p2=&b;if(a<b){p=p1;p1=p2;p2=p;}printf("a=%d,b=%d\n",a,b);printf("max=%d,min=%d\n",*p1,*p2);}程序運(yùn)行結(jié)果如下:9,18a=9,b=18max=18,min=97.1.5指針數(shù)組

指針數(shù)組:定義為指針型的數(shù)組稱為指針數(shù)組。例:利用指針數(shù)組對(duì)字符型二維數(shù)組輸入輸出。

#include〈stdio.h〉voidmain(){chara[5][20],*p[5];inti;for(i=0;i<5;i++)p[i]=a[i];for(i=0;i<5;i++)scanf(“%s”,p[i]);for(i=0;i<5;i++)printf(“%s\n”,p[i]);}7.1.6數(shù)組行指針

數(shù)組行指針:用于指向二位數(shù)組的某一行的指針稱為數(shù)組行指針。格式:int(*p)[m];

說明:p是行指針變量;

m是數(shù)組列大小。

數(shù)組元素地址*(指針變量+行下標(biāo))+列下標(biāo)

數(shù)組元素引用*(*(指針變量+行下標(biāo))+列下標(biāo))例:#include〈stdio.h〉voidmain(){inta[2][3],(*p)[3]=a;inti,j;for(i=0;i<2;i++)for(j=0;j<3;j++)scanf(“%d”,*(p+i)+j);for(i=0;i<2;i++){printf(“\n”);for(j=0;j<3;j++)printf(“%10d”,*(*(p+i)+j));

}}7.2指針運(yùn)算

指針:是指向某類型數(shù)據(jù)的地址。說明:

地址的分配是由C編譯系統(tǒng)決定的;

指針變量的值是一具體類型的特定變量地址所允許的整數(shù),但必須明確:指針不是整數(shù)。

對(duì)指針的運(yùn)算不能像對(duì)整型數(shù)據(jù)那樣進(jìn)行所有的算術(shù)、邏輯和關(guān)系運(yùn)算,而只能進(jìn)行C

語言所規(guī)定的某些運(yùn)算。

指針運(yùn)算的值與某一類型數(shù)據(jù)的地址有關(guān)。7.2.1指針的算術(shù)運(yùn)算

設(shè)p、q是指針變量,n為一整數(shù),則:p+n、p-n、p++、p--、++p、--p、p-q都是指針變量允許實(shí)施的算術(shù)運(yùn)算,它們的意義分別是:

(1)p+n:表示由p所指向位置向高地址移n個(gè)位移量。

(2)p-n:表示由p所指向位置向低地址移n個(gè)位移量。

(3)p++:將當(dāng)前指針p向高地址移一個(gè)位移量

(4)p--:將當(dāng)前指針p向低地址移一個(gè)位移量。

(5)++p:將當(dāng)前指針p向高地址移一個(gè)位移量。

(6)--p:將當(dāng)前指針p向低地址移一個(gè)位移量。

(7)p-q:表示兩個(gè)被指向?qū)ο箝g相隔位移量的個(gè)數(shù)。【例7.3】計(jì)算字符串長(zhǎng)度函數(shù)。strlen(char*s){char*p=s;while(*p!='\0')p++;return(p-s);}strlen(char*s){char*p=s;while(*p)p++;return(p-s);}7.2.2指針的關(guān)系運(yùn)算

設(shè)p、q是指向同一數(shù)據(jù)集合的指針變量,則p<q、p<=q、p>q、p>=q、p==q、p!=q是指針變量允許實(shí)施的關(guān)系運(yùn)算。它們的意義分別是:

(1)p>q:若表達(dá)式的結(jié)果為非0;則表明p指針變量所指向的元素在q指針變量所指向的元素之后。否則,結(jié)果為0,則表明

p指向的元素在q指向的元素之前。

(2)p<q:若表達(dá)的結(jié)果為非0,則表明p所指向的元素在q所指向的元素之前。否則,結(jié)果為0,則表明p所指向的元素在q

所指向的元素之后。圖7.7內(nèi)存……..a[0]a[1]a[3]a[2]a[4]a[5]……...(低地址)(高地址)pq7.2.3指針變量的賦值運(yùn)算

設(shè)p,q是指向同一數(shù)據(jù)類型的指針變量,n為一整數(shù),則:p=q、p=q+n、p=q-n、p+=n,p-=n都是指針變量允許實(shí)施的賦值運(yùn)算。它們的意義分別是:

(1)p=q:將q中的地址值賦給p。

(2)p=q+n:將由q所指位置向高地址移n個(gè)位移量后,所得的實(shí)際地址值賦給p。

(3)p=q-n:將由q所指位置向低地址移n個(gè)位移量后,所得的實(shí)際地址值賦給p。

(4)p+=n:等價(jià)于p=p+n。

(5)p-=n:等價(jià)于p=p-n。指針變量在進(jìn)行賦值運(yùn)算時(shí),要注意:

(1)相互賦值的指針變量p、q,它們所指向的變量的類型應(yīng)一致,否則會(huì)出錯(cuò)。

(2)如果p+=x中,x低于int類型級(jí)別時(shí),應(yīng)將x

強(qiáng)制轉(zhuǎn)換成int類型。如x為double型時(shí),寫為:p+=(int)x;(3)指針的賦值運(yùn)算僅上述列出的形式有意義,其他均無意義。更不能將一個(gè)整型變量的值或常數(shù)賦給指針變量。即:

p=n;p=100;都是錯(cuò)誤的。7.2.4指針運(yùn)算符與自增、自減運(yùn)算符的混用

指針運(yùn)算符和自增、自減運(yùn)算符都屬于同優(yōu)先級(jí)左結(jié)合的單目運(yùn)算符。它們的混用在程序設(shè)計(jì)中較為普遍,尤其是指針運(yùn)算符*與自增運(yùn)算符++、自減運(yùn)算符--的混用更為常見。例如:

while(*p)putchar(*p++);

中的*p++就是指針運(yùn)算符與自增運(yùn)算符混用的一種。在這條語句中,*p++的運(yùn)算結(jié)果是:先將*p作為操作數(shù)輸出,再將指針變量p向高地址自增一個(gè)位移量。所以:*p++等價(jià)于*p;p+=1;7.3指針與函數(shù)參數(shù)

函數(shù)的參數(shù)不僅可以是基本類型的變量,也可以是指針變量。對(duì)任何必須以地址方式傳送的參數(shù),均可以利用指針來實(shí)現(xiàn)。特別是函數(shù)的返回值多于一個(gè)時(shí),可以利用指針來傳遞函數(shù)的返回值。注:當(dāng)指針作為函數(shù)的參數(shù)時(shí),對(duì)應(yīng)的實(shí)參必須是變量的地址或指針;其相應(yīng)的形參應(yīng)是指針變量。這樣才能保證地址的正確傳送。【例7.5】將指針作為函數(shù)參數(shù),改寫[例7.2]

的程序。#include〈stdio.h〉swap(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}voidmain(){inta,b;int*pa,*pb;

scanf("%d,%d",&a,&b);pa=&a;pb=&b;if(a<b)swap(pa,pb);printf(”\n%d,%d\n",a,b);}程序運(yùn)行結(jié)果如下:8,1818,8#include〈stdio.h〉swap(int*p1,int*p2){int*p;p=p1;p1=p2;p2=p;}voidmain(){inta,b;int*pa,*pb;scanf("%d,%d",&a,&b);pa=&a;pb=&b;if(a<b)swap(pa,pb);printf(”%d,%d\n",*pa,*pb);}程序運(yùn)行結(jié)果如下:8,188,18#include〈stdio.h〉

swap(int*p1,int

*p2){int*p;p=p1;p1=p2;p2=p;}voidmain(){inta,b;int*pa,*pb;scanf("%d,%d",&a,&b);pa=&a;pb=&b;if(a<b)swap(&a,&b);printf(”\n%d,%d\n",*pa,*pb);}程序運(yùn)行結(jié)果如下:8,188,18#include〈stdio.h〉swap(int**p1,int**p2){int*p;p=*p1;*p1=*p2;*p2=p;}voidmain(){inta,b,*pa,*pb;scanf("%d,%d",&a,&b);pa=&a;pb=&b;if(a<b)swap(&pa,&pb);printf("\n%d,%d\n",*pa,*pb);}程序運(yùn)行結(jié)果如下:

8,1818,8注意:

交換指針?biāo)赶蜃兞康闹岛徒粨Q指針值的效果是不同的。

swap(int*p1,int*p2){int*p;p=p1;p1=p2;p2=p;}錯(cuò)誤:swap(int*p1,int*p2){int*p;*p=*p1;*p1=*p2;*p2=*p;}7.4指針與數(shù)組

在C語言中,指針與數(shù)組的關(guān)系非常密切。任何能由下標(biāo)完成的對(duì)數(shù)組的操作,也可以由指針來實(shí)現(xiàn)。使用指針對(duì)數(shù)組進(jìn)行運(yùn)算處理,可使目標(biāo)程序占用內(nèi)存少、運(yùn)行速度快。指針與數(shù)組密切的關(guān)系主要反映在以下兩點(diǎn):

(1)對(duì)數(shù)組元素訪問時(shí),用數(shù)組的下標(biāo)和用指針是統(tǒng)一的;

(2)當(dāng)主調(diào)函數(shù)中的實(shí)參是數(shù)組名時(shí),被調(diào)函數(shù)中相應(yīng)形參數(shù)組的定義可以由形參指針變量代替。說明

若程序中定義如下數(shù)組和指針變量:

inta[10],*pa;

由于數(shù)組名是數(shù)組的首地址,一旦將數(shù)組名賦給指針變量后,即pa=a;

指針與數(shù)組之間就建立了對(duì)立關(guān)系:數(shù)組下標(biāo)和指針變量運(yùn)算的對(duì)應(yīng);數(shù)組元素與指針變量的*運(yùn)算(例如*pa)的對(duì)應(yīng)。設(shè)i為數(shù)組的下標(biāo),n為一整型數(shù),那么;&a[0]≡a≡pa≡&pa[0]&a[i]≡a+i≡pa+i≡&pa[i]

a[0]≡*a≡*pa≡pa[0]a[i]≡*(a+i)≡*(pa+i)≡pa[i]【例7.6】用指針變量訪問數(shù)組元素。

#include〈stdio.h〉voidmain(){staticinta[]={1,2,3,4,5};int*pa,k;pa=a;k=0;while(k<5){printf("%d,",*(pa+k));k++;}printf("\n");}程序運(yùn)行結(jié)果如下:1,2,3,4,5,【例7.7】用形參指針變量的定義代替形參數(shù)組的

定義。#include〈stdio.h〉voidfun(char*p){while(*p)putchar(*p++);printf(“\n");}voidmain(){staticchara[]="ABCDE";fun(a);}程序運(yùn)行結(jié)果如下:ABCDE

形參數(shù)組的定義可以用形參指針變量代替。需要強(qiáng)調(diào)的是:

(1)若實(shí)參是變量的地址,傳給形參指針變量后,這個(gè)指針不能作為數(shù)組的指針使用。

(2)在函數(shù)調(diào)用中,實(shí)參是數(shù)組名時(shí),往往相應(yīng)的形參用指針變量,這使得有時(shí)在函數(shù)中會(huì)看不出它是一個(gè)數(shù)組,因此,在函數(shù)中引用指針變量時(shí),先要弄清指針變量所指的對(duì)象是什么,才不會(huì)出錯(cuò)。

(3)指針變量可以用++、--來不斷改變自身的值,而數(shù)組名不允許進(jìn)行自增、自減的運(yùn)算。

(4)要注意指針變量的當(dāng)前值。尤其是要注意指針初值的恢復(fù)。舉例#include〈stdio.h〉voidmain(){inta[10],*p,i;p=a;for(i=0;i<10;i++)scanf("%d",p++);printf("\n");for(i=0;i<10;i++)printf("%d,",*p++);}#include〈stdio.h〉voidmain(){inta[10],*p,i;p=a;for(i=0;i<10;i++)scanf("%d",p++);printf("\n");p=a;for(i=0;i<10;i++)printf("%d,",*p++);}錯(cuò)誤正確【例7.8】用指針輸出多維數(shù)組元素#include〈stdio.h〉voidmain(){staticinta[3][3]={{1,2,3},{4,5,6},{7,8,9}};staticintb[2][2][2]={{{1,2},{3,4}},{{5,6},{7,8}}};int*p,i;p=a;for(i=0;i<9;i++){if(i%3==0)printf("\n");printf("%3d",*p++);}printf("\n");p=b;for(i=0;i<8;i++){if(i%2==0)printf("\n");printf("%3d",*p++);}printf("\n");}【例7_9】用指針法輸出個(gè)別數(shù)組元素。#include〈stdio.h〉voidmain(){staticinta[2][3]={1,2,3,4,5,6};int*p;p=a;printf("a[1][2]=%d\n",*(p+1*3+2));printf("a[0][1]=%d\n",*(p+0*3+1));}程序運(yùn)行結(jié)果如下:a[1][2]=6a[0][1]=2指針指向二維數(shù)組首地址的數(shù)組元素引用:若inta[2][3],*p=a;則數(shù)組元素引用a[i][j]≡*(p+i*3+j)7.5字符指針和字符串

C語言對(duì)字符串的描述有兩種方法:用字符數(shù)組描述字符串,或者用字符指針描述字符串。而用字符指針形式描述字符串比使用字符數(shù)組有更大的便利性,程序也顯得清晰、簡(jiǎn)煉。通常,用字符數(shù)組處理字符串時(shí),要定義一個(gè)存儲(chǔ)字符串的字符數(shù)組,再利用循環(huán)對(duì)字符數(shù)組中的每個(gè)元素進(jìn)行操作?!纠?.10】利用字符數(shù)組處理字符串。#include〈stdio.h〉voidmain(){staticcharc[11]={"Clanguage"};inti;for(i=0;i<10;i++)printf("%c",c[i]);printf("\n");}程序運(yùn)行結(jié)果如下:Clanguage

對(duì)字符串處理的另一種方法是:利用指向字符串的字符指針變量。

【例7.11】用指向字符串的指針處理字符串。#include〈stdio.h〉voidmain(){char*p;p="Clanguage";printf("%s\n",p);}程序運(yùn)行結(jié)果如下:Clanguage【例7.12】用字符指針將一個(gè)字符數(shù)組中的字

符串拷貝到另一個(gè)字符數(shù)組中。#include<stdio.h>strcpy(char*p1,char*p2){while(*p2++=*p1++);}voidmain(){staticchara1[]="Clanguage";chara2[11];strcpy(a1,a2);puts(a2);}程序運(yùn)行結(jié)果如下:Clanguage7.6函數(shù)型指針7.6.1函數(shù)型指針的定義一個(gè)函數(shù)被執(zhí)行時(shí),在內(nèi)存中占據(jù)一定的空間,這個(gè)空間的起始地址是用函數(shù)名表示的,稱為函數(shù)的入口地址。可以用指針指向這個(gè)入口地址,并通過該指針變量來調(diào)用這個(gè)函數(shù)。這種指針變量稱為函數(shù)型指針變量。

函數(shù)型指針變量的一般形式為:

數(shù)據(jù)類型標(biāo)識(shí)符(*指針變量名)();例如:

int(*f1)();float(*f2)();

定義了兩個(gè)函數(shù)型指針變量f1和f2,f1所指向的函數(shù)返回整型類數(shù)據(jù),f2所指向的函數(shù)返回實(shí)型類數(shù)據(jù)。7.6.2函數(shù)型指針的賦值

給函數(shù)型指針變量賦值的一般形式為:

函數(shù)型指針變量名=函數(shù)名例如:有一個(gè)C函數(shù)min(a,b),若fp為函數(shù)型指針變量,則fp=min;的含義為將min

函數(shù)的入口地址賦給函數(shù)型指針變量

fp,使得fp指向函數(shù)min。上述語句不能寫成:fp=min(a,b);的形式。對(duì)函數(shù)的調(diào)用就有兩種方法來實(shí)現(xiàn)。第一種方法,用函數(shù)名實(shí)現(xiàn)調(diào)用:x=min(a,b);第二種方法,用函數(shù)型指針實(shí)現(xiàn)調(diào)用:

fp=min;x=(*fp)(a,b);7.6.3函數(shù)型指針的引用

【例7.13】利用函數(shù)型指針變量調(diào)用函數(shù)max,計(jì)

算最大值。#include〈stdio.h〉voidmain(){int(*fp)(),max();inta,b,c;scanf("%d,%d",&a,&b);fp=max;c=(*fp)(a,b);printf("max=%d\n",c);}max(intx,inty){intz;z=(x>y)?x:y;return(z);}程序運(yùn)行結(jié)果如下:10,20max=207.7指針型指針

在C語言中,允許一個(gè)指針指向另一個(gè)指針。如果一個(gè)指針變量的內(nèi)容是另一個(gè)指針變量的存儲(chǔ)地址,則稱該指針變量為指針型指針變量,又稱指向指針的指針變量或多級(jí)指針變量。指針型指針變量使用前必須先定義。7.7.1指針型指針變量的定義

指針型指針變量定義的一般格式為:類型標(biāo)識(shí)符**標(biāo)識(shí)符;

其中,標(biāo)識(shí)符是被定義的指針型指針變量的名字。類型標(biāo)識(shí)符則表明了被指針型指針變量所指向的指針變量所指向的變量的數(shù)據(jù)類型。例如:

int**pp,*p,i;

p=&i;pp=&p;【例7.15】指針型指針變量舉例。#include〈stdio.h〉voidmain(){inti,*p,**pp;i=8;p=&i;pp=&p;printf("%d\n%d\n%d\n",i,*p,**pp);}程序運(yùn)行結(jié)果如下:8887.7.2指針型指針的引用例7.16用指針型指針實(shí)現(xiàn)5門課名字符串的輸出。#include〈stdio.h〉voidmain(){staticchar*p[]={"BASIC","Ada","PASCAL","C","FORTRAN"};char**pp;inti;for(i=0;i<5;i++){pp=p+i;printf("%s\n",*pp);}}程序運(yùn)行結(jié)果如下:BASICAdaPASCALCFORTRAN【例7.17】指針型指針用于指針數(shù)組元素指

向整型數(shù)據(jù)的例子。#include〈stdio.h〉voidmain(){staticinta[5]={2,4,6,8,10};staticint*pi[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};int**pp,i;pp=pi;for(i=0;i<5;i++){printf("%d\t%u\n",**pp,pp);pp++;}}結(jié)果:241441641842010422#include〈stdio.h〉voidmain(){staticinta[5]={2,4,6,8,10};staticint*pi[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};int**pp,i;pp=pi;for(i=0;i<5;i++){printf("%d\t%u\n",**pp,pp);(*pp)++;}}結(jié)果:2414414414414104147.8命令行參數(shù)前面使用的主函數(shù)main不帶參數(shù),即main(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論