C語言程序設(shè)計(微課版)課件 第七章 指針_第1頁
C語言程序設(shè)計(微課版)課件 第七章 指針_第2頁
C語言程序設(shè)計(微課版)課件 第七章 指針_第3頁
C語言程序設(shè)計(微課版)課件 第七章 指針_第4頁
C語言程序設(shè)計(微課版)課件 第七章 指針_第5頁
已閱讀5頁,還剩56頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

預(yù)備知識內(nèi)存:就是內(nèi)部存儲器,是由存儲單元組成的。它的特點是存儲單元是線性連續(xù)的。存儲單元的最小單位是字節(jié)。

1.內(nèi)存的概念第七章指針地址:內(nèi)存區(qū)每個字節(jié)都有一個編號,這種編號稱為內(nèi)存地址。通過地址我們就能夠訪問該地址所標(biāo)識的存儲單元。2.地址的概念1變量的地址:

變量在內(nèi)存中總占用幾個連續(xù)的字節(jié),開始字節(jié)的地址,就是變量的地址。20077.1指針和指針變量7.1.1地址和指針的概念4直接訪問與間接訪問直接訪問:按變量名存取變量值間接訪問:通過指針變量間接存取他所指向的變量指針變量…...…...2000200820122010整型變量i10變量i_pointer2002200420062000例*i_pointer=20;-----間接訪問202指針的概念指針指針變量變量變量地址(指針)變量值指向地址存入指針變量7.1.2

指針變量的定義和初始化1.指針變量的定義指針變量的定義一般形式:數(shù)據(jù)類型*變量名;例inti,j;floata,b;

int

*pointer_1,*pointer_2;

注意:1、指針變量前面的”*”,表示該變量的類型為指針變量2、在定義指針變量時必須指定指向類型3、在定義多個指針變量時,不能寫成:

int*pointer_1,pointer_2;int*pointer_1,*pointer_2;指針變量的賦值一般形式:數(shù)據(jù)類型*變量名=初始地址值;例inta;int*p1;p1=&a;說明:1、可對指針變量先進行定義,然后進行賦值;也可以在定義的同時進行初始化例

int*p1=&a;

inta;例inta;int*p1=&a;說明:2、指針變量的初始值必須和指針定義時的指向類型一致例inta;float*p1=&a;3、在賦值過程中,不能將地址以外的值賦給指針,否則系統(tǒng)會將它當(dāng)成地址來處理,這樣會對內(nèi)存產(chǎn)生誤操作.例

int*p1=100;4、可以將一個指針變量的值賦給另外指針變量例inta;int*p1=&a;int*p2=p1;說明:5、定義后賦值,指針變量前不要加”*”例inta;int*p1;p1=&a;例inta;int*p1;*p1=&a;6、在初始化中可以將一個指針初始化為一個空指針例

int*p1=0;&與*運算符含義含義:取變量的地址單目運算符結(jié)合性:自右向左含義:

取指針變量所指向的變量單目運算符結(jié)合性:自右向左理解7.1.3

指針變量的引用和運算例:通過指針變量訪問整型變量main(){inta,b;int*pointer_1,*pointer_2;a=100;b=10;pointer_1=&a;pointer_2=&b;printf(“%d,%d\n”,a,b);printf(“%d,%d\n”,*pointer_1,*pointer_2);}&*pointer_1*&a==&a==pointer_1

==*pointer_1==a例指針的概念main(){inta;

int*pa=&a;a=10;printf("a:%d\n",a);printf("*pa:%d\n",*pa);printf("&a:%x\n",&a);printf("pa:%x\n",pa);printf("&pa:%x\n",&pa);}運行結(jié)果:a:10*pa:10&a:f80pa:f80&pa:f84…...…...f80f88f8cf8a整型變量a10指針變量paf82f84f86f80例7-2

指針變量實例。輸入a和b兩個整數(shù),按先大后小的順序輸出a和bmain(){int*p1,*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);}運行結(jié)果:a=5,b=9max=9,min=5…...…...指針變量p1

指針變量p20002016200420082012

指針變量p2

整型變量b

整型變量a5201292016201220162012例指針變量…...…...2000200820122010整型變量a10變量pointer_12002200420062000(*pointer_1)++;*(pinter_1++);20整型變量b說明:1、指針變量加減一個整數(shù)2、指針變量可以自增自減3、指針變量可以賦空值

p=0;

p=NULL;4、兩指針變量可以相減5、兩指針變量可以進行比較int*p1,*p2,K;inta[10]={1,3,5,7,9,11,13,15,17,19};p1=a;p2=a;p1++;k=*p1;k=*(p1+3);k=*p1+2;if(p1>p2)k=p1-p2;7.2

指針與數(shù)組7.2.1指針和一維數(shù)組1.指向數(shù)組元素的指針例inta[10];int*p;

p=&a[0];//p=a;在定義指針變量的同時可以對其賦初值:或int*p=&a[0];或int*p=a;a[0]a[1]a[2]a[3]a[9]...整型指針p&a[0]p數(shù)組名是表示數(shù)組首地址的地址常量2.通過指針引用數(shù)組元素C規(guī)定:如果指針變量已指向數(shù)組中的一個元素,則P+1指向同一數(shù)組中的下一個元素。P+1所代表地址實際上是P+1×d(一個數(shù)組元素所占字節(jié)數(shù))若p的初值為&a[0],則:P+i和a+i就是a[i]的地址*(p+i)和*(a+i)是P+i和a+i所指向的數(shù)組元素即a[i]P[i]與*(p+i)等價*(p+i)和*(a+i)-----------指針法

p[i]和a[i]-------------------下標(biāo)法a[0]a[1]a[2]a[3]a[9]...整型指針p&a[0]pa[i]

p[i]

*(p+i)

*(a+i)a[0]a[1]a[2]a[3]a[4]例數(shù)組元素的引用方法main(){inta[5],*pa,i;for(i=0;i<5;i++) a[i]=i+1;pa=a;for(i=0;i<5;i++) printf("*(pa+%d):%d\n",i,*(pa+i));for(i=0;i<5;i++) printf("*(a+%d):%d\n",i,*(a+i));for(i=0;i<5;i++) printf("pa[%d]:%d\n",i,pa[i]);for(i=0;i<5;i++) printf("a[%d]:%d\n",i,a[i]);}12345pa數(shù)組指針的算術(shù)運算:若p1與p2指向同一數(shù)組,p1-p2=兩指針間元素個數(shù)p1+p2無意義例inta[10];int*p=&a[2];p++;*p=1;例inta[10];int*p1=&a[2];int*p2=&a[5];則:p2-p1=3;a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]a數(shù)組p1p1p2使用指針變量,有幾個問題要注意:1、可以改變指針變量的值

P++合法

a++不合法,數(shù)組名a始終是數(shù)組首元素的地址2、使用指針變量指向數(shù)組元素時,應(yīng)切實保證指向數(shù)組中有效的元素3、注意指針變量的運算,如果使P指向數(shù)組a首地址(即P=a),則:*P++*(++P)(*P)++++*Pfor(i=0;i<10;i++)printf(“%d”,*p++);main(){inti,*p,a[7];p=a;for(i=0;i<7;i++)scanf("%d",p++);printf("\n");for(i=0;i<7;i++,p++)printf("%d",*p);}例注意指針的當(dāng)前值p=a;pp58762730123456apppppp指針變量可以指到數(shù)組后的內(nèi)存單元例voidmain(){inta[]={5,8,7,6,2,7,3};inty,*p=&a[1];

y=(*--p)++;printf(“%d”,y);printf(“%d”,a[0]);}輸出:56pp58762730123456a例注意指針變量的運算67.2.2指針與二維數(shù)組1.二維數(shù)組的地址對于一維數(shù)組:(1)數(shù)組名array表示數(shù)組的首地址,即array[0]的地址;(2)數(shù)組名array是地址常量(3)array+i是&array[i](4)*(array+i)

array[i]arrayintarray[10];對于二維數(shù)組:(1)a是數(shù)組名,包含三個元素

a[0],a[1],a[2](2)每個元素a[i]

又是一個一維數(shù)組,包含4個元素inta[3][4];a[0]a[1]a[2]200020162032200020042016202020322036a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]a[0][2]a[0][3]a[1][2]a[1][3]a[2][2]a[2][3]對二維數(shù)組inta[3][4],有a-----二維數(shù)組的首地址,即第0行的首地址a+i-----第i行的首地址*(a+i)

a[i]&a[i][0]

*(a+i)+j

a[i]+j&a[i][j]

*(*(a+i)+j)*(a[i]+j)a[i][j]inta[3][4];a[0]a[1]a[2]200020162032200020042016202020322036a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]a[0][2]a[0][3]a[1][2]a[1][3]a[2][2]a[2][3]aa+1a+2inta[3][4];a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]a[0][2]a[0][3]a[1][2]a[1][3]a[2][2]a[2][3]二維數(shù)組元素表示形式:(1)a[1][2](2)*(a[1]+2)(3)*(*(a+1)+2)地址表示:a+i&a[i](3)&a[i][j](4)a[i](5)*(a+i)元素指針地址表示:(1)&a[1][2](2)a[1]+2(3)*(a+1)+2行指針4.二維數(shù)組的指針變量指向二維數(shù)組元素的指針變量例用指針變量輸出數(shù)組元素的值inta[3][4];a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]a[0][2]a[0][3]a[1][2]a[1][3]a[2][2]a[2][3]pmain(){inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};int*p;for(p=a[0];p<a[0]+12;p++){if((p-a[0])%4==0)printf(“\n”);printf(“%4d”,*p);}}35711131517192123指向一維數(shù)組的指針變量定義形式:數(shù)據(jù)類型

(*變量名)[元素個數(shù)];

例int(*p)[4];()不能少int(*p)[4]與int*p[4]不同p的值是一維數(shù)組的首地址,p是行指針可讓p指向二維數(shù)組某一行如inta[3][4],(*p)[4]=a;inta[3][4];a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]a[0][2]a[0][3]a[1][2]a[1][3]a[2][2]a[2][3]aa+1a+2pp+1p+2*(p+1)+2或p[1]+2

*(*(p+1)+2)或*(p[1]+2)指向一維數(shù)組指針變量維數(shù)和二維數(shù)組列數(shù)必須相同例一維數(shù)組指針變量舉例main(){inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

inti,j,(*p)[4];for(p=a,i=0;i<3;i++,p++)for(j=0;j<4;j++)printf("%d",*(*p+j));printf("\n");}inta[3][4];a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]a[0][2]a[0][3]a[1][2]a[1][3]a[2][2]a[2][3]ppp

a[0][j]

a[1][j]

a[2][j]7.3

指針與字符串1.字符串表示形式用字符數(shù)組實現(xiàn)例main(){charstring[]=“IloveChina!”;printf(“%s\n”,string);printf(“%s\n”,string+7);}IloveChistring[0]string[1]string[2]string[3]string[4]string[5]string[6]string[7]string[8]string[9]stringstring[10]string[11]string[12]string[13]n!a\0用字符指針實現(xiàn)例main(){char*string=“IloveChina!”;printf(“%s\n”,string);}字符指針初始化:把字符串首地址賦給stringchar*string;string=“IloveChina!”;IloveChistringn!a\0用字符指針實現(xiàn)例main(){char*string=“IloveChina!”;printf(“%s\n”,string);

string+=7;while(*string){putchar(string[0]);string++;}}IloveChistringn!a\0string*string!=0字符指針變量與字符數(shù)組char*str=“China”;

chara[]=“China”;字符數(shù)組a由若干元素組成,每個元素放一個字符;而字符指針變量str中存放字符串首地址

char*str;str=“IloveChina!”;(

)chara[20];a=“IloveChina!”;(

)str是指針變量,可多次賦值;a是數(shù)組名,表示地址常量,不能賦值。7.2.3

指針數(shù)組指針數(shù)組定義:數(shù)組中的元素為指針變量定義形式:數(shù)據(jù)類型*數(shù)組名[數(shù)組長度];例:char*p[4];由于“[]”比“*”的優(yōu)先級高,所以數(shù)組名先與“[數(shù)組長度]”結(jié)合,形成數(shù)組的定義形式,“*”表示此數(shù)組中的每個元素都是指針類型,“數(shù)據(jù)類型標(biāo)識符”說明指針的目標(biāo)變量的數(shù)據(jù)類型。

charname[5][9]={“gain”,“much”,“stronger”,“point”,“bye”};

char*name[5]={“gain”,“much”,“stronger”,“point”,“bye”};gain\0stronger\0point\0much\0name[0]name[1]name[2]name[3]name[4]bye\0gain\0stronger\0point\0much\0bye\0二維數(shù)組與指針數(shù)組區(qū)別:二維數(shù)組與指針數(shù)組區(qū)別:二維字符數(shù)組表示的字符串在存儲上是一片連續(xù)的空間,但中間可能有很多空的存儲單元,因為作為數(shù)組定義,需要指定列數(shù)為最長字符串的長度加1,而實際上各字符串長度一般并不相等。字符指針數(shù)組表示的字符串在空間上是分散的,也可以緊挨著連續(xù)存儲,只要將每個字符串的首字符地址放入指針數(shù)組的每個元素即可。指針數(shù)組賦值與初始化Lisp\0Fortran\0Basic\0p[0]p[1]p[2]p[3]0賦值:main(){chara[]="Fortran";charb[]="Lisp";charc[]="Basic";

char*p[4];

p[0]=a;p[1]=b;p[2]=c;p[3]=NULL;……..}或:main(){char*p[4];p[0]="Fortran";p[1]="Lisp";p[2]="Basic";p[3]=NULL;……..}初始化:main(){char*p[]={"Fortran","Lisp","Basic",NULL};……..}Lisp\0Fortran\0Basic\0p[0]p[1]p[2]p[3]0例要求輸入1,2,3,4,5,6,7,8,9,10,11,12分別輸出:January,February,March,April,May,June,July,August,September,October,November,December字符串main(){char*month[12]={“January”,”February”,”March”,”April”,”May”,”June”,”July”,”August”,”September”,”O(jiān)ctober”,”November”,”December”};intmonth1;printf(“EntertheNoofmonth:”);scanf(“%d”,&month1);if(month1>=1&&month1<=12)printf(“No.%dmonth---%s\n”,month1,month[month1-1]);}輸入:10輸出:No.10month---October普通變量作為函數(shù)參數(shù)voidswap(intx,inty){inttemp;temp=x;x=y;y=temp;}main(){inta,b;scanf("%d,%d",&a,&b);if(a<b)swap(a,b);printf("\n%d,%d\n",a,b);}例

將數(shù)從大到小輸出…...…...20002010201420042008200C5變量a

變量b(main)9

變量temp

變量y

變量x(swap)55959COPY7.4

指針與函數(shù)普通變量作為函數(shù)參數(shù)voidswap(intx,inty){inttemp;temp=x;x=y;y=temp;}main(){inta,b;scanf("%d,%d",&a,&b);if(a<b)swap(a,b);printf("\n%d,%d\n",a,b);}例

將數(shù)從大到小輸出值傳遞…...…...20002010201420042008200C5變量a

變量b(main)9運行結(jié)果:5,9voidswap(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}main(){inta,b;int*pointer_1,*pointer_2;scanf("%d,%d",&a,&b);

pointer_1=&a;pointer_2=&b;if(a<b)swap(pointer_1,pointer_2);printf("\n%d,%d\n",a,b);}…...20002010201420042008200C2018201C2020...59整型變量a

整型變量b(main)指針pointer_1指針pointer_220002004(swap)指針p1指針p2整型p5920002004COPY5例

將數(shù)從大到小輸出指針變量作為函數(shù)參數(shù)——地址傳遞voidswap(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}main(){inta,b;int*pointer_1,*pointer_2;scanf("%d,%d",&a,&b);pointer_1=&a;pointer_2=&b;if(a<b)swap(pointer_1,pointer_2);printf("\n%d,%d\n",a,b);}…...20002010201420042008200c2018201c2020...59整型變量a整型變量b(main)指針pointer_1指針pointer_22000200459例

將數(shù)從大到小輸出運行結(jié)果:9,5地址傳遞voidswap(int*pt1,int*pt2){inttemp;temp=*pt1;*pt1=*pt2;*pt2=temp;}voidexchange(int*q1,int*q2,int*q3){if(*q1<*q2)swap(q1,q2);if(*q1<*q3)swap(q1,q3);if(*q2<*q3)swap(q2,q3);}main(){inta,b,c,*p1,*p2,*p3;scanf("%d,%d,%d",&a,&b,&c);

p1=&a;p2=&b;p3=&c;exchange(p1,p2,p3);printf("\n%d,%d,%d\n",a,b,c);}例7-12

輸入a,b,c三個整數(shù),按大小順序輸出如果想通過函數(shù)調(diào)用得到n個要改變的值:1、在主調(diào)函數(shù)中設(shè)n個變量,用n個指針變量指向它們2、然后將指針變量做實參,將n個變量的地址傳給所調(diào)用的函數(shù)的形參3、通過形參指針變量,改變主調(diào)函數(shù)中這n個變量的值4、主調(diào)函數(shù)中可以使用這n個改變了值的變量若有一個實參數(shù)組,想在函數(shù)中改變此數(shù)組的元素的值,實參和形參的對應(yīng)關(guān)系如下:實參形參數(shù)組名指針變量數(shù)組名指針變量數(shù)組名數(shù)組名指針變量指針變量3、數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù),是地址傳遞1.形參實參都用數(shù)組名main(){inta[10];f(a,10);

}……..……..f(intx[],intn){

}……..a[0]a[1]a[2]a[3]a[9]...x[0]x[9]2.實參用數(shù)組名,形參用指針變量main(){inta[10];f(a,10)

}……..……..f(int*x,intn){

}……..a[0]a[1]a[2]a[3]a[9]...整型指針x&a[0]x3.實參形參都用指針變量main(){inta[10];int*p=a;f(p,10)

}……..……..f(int*x,intn){

}……..a[0]a[1]a[2]a[3]a[9]...x,p整型指針x&a[0]整型指針P&a[0]4.實參為指針變量,形參為數(shù)組名main(){inta[10];int*p=a;f(p,10)

}……..……..f(intx[],intn){

}……..a[0]a[1]a[2]a[3]a[9]...整型指針P&a[0]P,x[0]

C語言程序設(shè)計

第一章程序設(shè)計基礎(chǔ)兩數(shù)求最大值的例子:main() /*主函數(shù)*/{ /*main函數(shù)體開始*/inta,b,c; /*聲明部分定義變量*/scanf(“%d,%d”,&a,&b);

c=max(a,b);/*調(diào)用max,將調(diào)用結(jié)果賦給c*/printf(“max=%d”,c);} /*main函數(shù)體結(jié)束*/intmax(intx,inty) /*計算兩數(shù)中較大數(shù)的函數(shù)*/{ /*max函數(shù)體開始*/intz; /*聲明部分,定義變量*/if(x>y)z=x;elsez=y;returnz; /*將z值返回,通過max帶回調(diào)用處*/} /*max函數(shù)體結(jié)束*/7.4.2

指向函數(shù)的指針變量函數(shù)指針:函數(shù)在編譯時被分配的入口地址,用函數(shù)名表示max…...指令1指令2函數(shù)指針變量賦值:如p=max;p=&max;

也可在定義時進行初始化

int(*p)()=max;int(*p)()=&max;函數(shù)返回值的數(shù)據(jù)類型專門存放函數(shù)入口地址可指向返回值類型相同的不同函數(shù)指向函數(shù)的指針變量-------函數(shù)指針定義形式:數(shù)據(jù)類型(*變量名)();

如int(*p)();函數(shù)指針變量指向的函數(shù)必須有函數(shù)定義或聲明函數(shù)調(diào)用形式:c=max(a,b);c=(*p)(a,b);對函數(shù)指針變量pn,p++,p--無意義()不能省int(*p)()與int*p()不同例比較兩個數(shù)大小,求最大值main(){intmax(int,int);inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("a=%d,b=%d,max=%d\n",a,b,c);}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}main(){intmax(int,int),(*p)();inta,b,c;

p=max;scanf("%d,%d",&a,&b);c=(*p)(a,b);printf("a=%d,b=%d,max=%d\n",a,b,c);}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}7.4.3返回指針值的函數(shù)——指針函數(shù)

返回值為指針的函數(shù)稱作指針型函數(shù)。指針函數(shù)定義函數(shù)首部的一般形式:

數(shù)據(jù)類型*函數(shù)名(形參數(shù)列表)含意:函數(shù)的返回值是一個指針,它指向所指定數(shù)據(jù)類型的數(shù)據(jù)。例如:int*a(intx,inty);//函數(shù)聲明含意:a是函數(shù)名,調(diào)用它以后能得到一個指向整型數(shù)據(jù)的指針(地址)。定義方法:

例用戶輸入一個月份號(如10),程序輸出對應(yīng)月份的英文名(October)#include<stdio.h>char*month_name(intn);main(){intn;char*p;printf(“Inputanumberofamonth:\n”);scanf(“%d”,&n);p=month_name(n);printf(“Itis%s\n”,p);}char*month_name(intn){staticchar*name[]={“Illegalmonth”,“January”,”February”,”March”,”April”,”May”,”June”,”July”,”August”,”September”,”O(jiān)ctober”,”November”,”December”};if(n<1||n>12)return(name[0]);elsereturn(name[n]);}輸入:10輸出:ItisOctober例編寫一個函數(shù)match,它的功能是在一個字符串中尋找某個字符,如果找到,把該字符及后面的字符全部輸出,否則,返回空指針。#include<stdio.h>char*match(charc,char*s){while(*s!='\0')if(*s==c)return(s);elses++;return(0);}main(){char*cp="ABCDEFGHIJK";printf("%s\n",match('B',cp));printf("%s\n",match('I',cp));printf("%s\n",match('a',cp));}BCDEFGHIJKIJK(NULL)多級指針定義:如果一個指針變量中存放的是另一個指針變量的地址,則稱這個指針變量為指向指針的指針變量。一級指針(單級間接地址):指針變量中存放目標(biāo)變量的地址p2&p1&i3P1(指針變量)i(整型變量)二級指針:指針變量中存放一級指針變量的地址例int*p;

inti=3;p=&i;*p=5;&i3P(指針變量)i(整型變量)一級指針單級間接尋址二級指針一級指針目標(biāo)變量二級間接尋址7.5

指向指針的指針目標(biāo)變量5定義形式:數(shù)據(jù)類型**變量名;如char**p;最終目標(biāo)變量的數(shù)據(jù)類型*p是p間接指向變量的地址**p是p間接指向的變量例inti=3;

int*p1;

int**p2;p1=&i;p2=&p1;**p2=5;ip1p23&i&p1**p2,*p1*p2多級指針例三級指針int***p;

四級指針char****p;5在定義和使用指向指針的指針變量時應(yīng)注意: 在定義多級指針變量時要用到多個“*”來定義,是幾級指針變量,就要用到幾個“*”.int*p1,a;int**p2;int***p3;同類型的同級指針變量間才能相互賦值。

p1=&a;p2=&p1;p3=&p2;通過多級指針變量對最終目標(biāo)對象賦值時,也必須采用相應(yīng)個數(shù)的指針運算符“*”.a=10;*p1=10;**p2=10;***p3=10;例inti,**p;p=&i;(

)//p是二級指針,不能用變量地址為其賦值20002008200A20022004200612變量a

變量b(main)

指針變量p2000

指針變量q2002例一級指針與二級指針#include<stdio.h>voidswap(int*r,int*s){int*t;t=r;r=s;s=t;}main(){inta=1,b=2,*p,*q;

p=&a;q=&b;

swap(p,q);printf("%d,%d\n",*p,*q);}20022000COPY

指針變量s

指針變量r(swap)

指針變量t20002002200020002008200A20022004200612變量a

變量b(main)

指針變量p2000

指針變量q2002例一級指針與二級指針#include<stdio.h>voidswap(int*r,int*s){int*t;t=r;r=s;s=t;}main(){inta=1,b=2,*p,*q;

p=&a;q=&b;

swap(p,q);printf("%d,%d\n",*p,*q);}輸出:1,2例一級指針與二級指針#include<stdio.h>voidswap(int**r,int**s){int*t;t=*r;*r=*s;*s=t;}main(){inta=1,b=2,*p,*q;p=&a;q=&b;

swap(&p,&q);printf("%d,%d\n",*p,*q);}20002008200A20022004200612變量a

變量b(main)

指針變量p2000

指針變量q200220062004

二級指針s

二級指針r(swap)

指針變量t200020022000例一級指針與二級指針#include<stdio.h>voidswap(int**r,int**s){int*t;t=*r;*r=*s;*s=t;}main(){inta=1,b=2,*p,*q;p=&a;q=&b;

swap(&p,&q);printf("%d,%d\n",*p,*q);}20002008200A20022004200612變量a

變量b(main)

指針變量p2000

指針變量q200220002002輸出:2,1例一級指針與二級指針#include<stdio.h>voidswap(int**r,int**s){int*t;t=*r;*r=*s;*s=t;}main(){inta=1,b=2,*p,*q;p=&a;q=&b;

swap(&p,&q);printf("%d,%d\n",*p,*q);}abpqbapqabrspqabrspq輸出:2,1例用二級指針處理字符串voidmain(){

char**p;char*name[]={"hello","good","world","bye",“ok"};inti;for(i=0;i<5;i++){p=name+i;printf("%s\n",*p);}}name[0]name[1]name[2]name[3]name[4]char*name[5]worldbyeokhellogoodname運行結(jié)果:hellogoodworldbyeokp二級指針與指針數(shù)組的關(guān)系

int**p與int*q[10]指針數(shù)組名q是二級指針常量p=q;p+i是q[i]的地址系統(tǒng)只給二級指針p

溫馨提示

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

評論

0/150

提交評論