chap08-補(bǔ)充練習(xí)-指針_第1頁(yè)
chap08-補(bǔ)充練習(xí)-指針_第2頁(yè)
chap08-補(bǔ)充練習(xí)-指針_第3頁(yè)
chap08-補(bǔ)充練習(xí)-指針_第4頁(yè)
chap08-補(bǔ)充練習(xí)-指針_第5頁(yè)
已閱讀5頁(yè),還剩21頁(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)介

補(bǔ)充練習(xí)例1:閱讀源程序,寫(xiě)出運(yùn)行結(jié)果

#include<stdio.h>voidsub(intx,inty,int*z){*z=y-x;}

voidmain(){inta,b,c;sub(9,5,&a);sub(3,a,&b);sub(a,b,&c);printf(“%d,%d,%d\n”,a,b,c);}注意:

指向變量的指針變量做參數(shù),如何進(jìn)行參數(shù)的傳遞;-4-7-3例p指向float型數(shù)組,若執(zhí)行

p+1則p的值變?yōu)閜+1

4例p指向int型數(shù)組,且p=&a[0];

則p+1指向a[1]例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ù)組pp+1,a+1p+i,a+ip+9,a+91例2:inta[]={1,2,3,4,5,6,7,8,9,10},*p=a,i;

數(shù)組元素地址的正確表示:

(A)&(a+1)(B)a++(C)&p(D)&p[i]√數(shù)組名是地址常量p++,p--(

)a++,a--(

)a+1,*(a+2)(

)不能對(duì)表達(dá)式求地址求的是指針p的地址

#include<stdio.h>voidmain(){inta[]={5,8,7,6,2,7,3};inty,*p=&a[1];y=(*--p)++;printf(“%d”,y);printf(“%d”,a[0]);}輸出:56pp58762730123456a例3:注意指針變量的運(yùn)算6#include<stdio.h>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);}例4:注意指針的當(dāng)前值p=a;pp5876273

0

1

2

3

4

5

6apppppp指針變量可以指到數(shù)組后的內(nèi)存單元for(p=a;p<(a+10);p++)printf("%d",*p);例5數(shù)組元素的引用#include<stdio.h>voidmain(){inta[10],i;

for(i=0;i<10;i++)a[i]=i;for(i=0;i<10;i++)printf("%d",a[i]);

}*(a+i)

int*p;for(p=a,i=0;i<10;i++,p++)*p=i;例6

閱讀下列源程序,試說(shuō)明其功能。#include<stdio.h>voidmain(){intadd(int*p,intn);inta[8]={1,2,3,4,5,6,7,8};int*p,sum;p=&a[0];

sum=add(p,8);printf(“sum=%d\n”,sum);}

intadd(int*p1,intn){inti,total=0;for(i=0;i<n;i+=2,p1+=2)total=total+*p1;return(total);}16例7:將數(shù)組a中的n個(gè)整數(shù)按相反順序存放

(1)

ij#include<stdio.h>voidinv(intx[],intn){intt,i,j,m=n/2;for(i=0;i<m;i++){j=n-1-i;t=x[i];x[i]=x[j];x[j]=t;}}main(){inti,a[10]={3,7,9,11,0,6,7,5,4,2};

inv(a,10);printf("Thearrayhasbeenreverted:\n");for(i=0;i<10;i++)printf("%d,",a[i]);printf("\n");}

37911067

5420123456789ijijijji11

7605947實(shí)參與形參均用數(shù)組m=523例8:將數(shù)組a中的n個(gè)整數(shù)按相反順序存放

(2)

實(shí)參用數(shù)組,形參用指針變量#include<stdio.h>voidinv(int*x,intn){intt,*p,*i,*j,m=n/2;p=x+m-1;i=x;j=x+n-1;for(;i<=p;i++,j--){t=*i;*i=*j;*j=t;}}main(){inti,a[10]={3,7,9,11,0,6,7,5,4,2};inv(a,10);printf("Thearrayhasbeenreverted:\n");for(i=0;i<10;i++)printf("%d,",a[i]);printf("\n");}37911067542a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]xp=x+m-1a數(shù)組60711594723ijijijjiji例9:將數(shù)組a中的n個(gè)整數(shù)按相反順序存放(3)

實(shí)參與形參均用指針變量#include<stdio.h>voidinv(int*x,intn){intt,*i,*j,*p,m=n/2;i=x;j=x+n-1;p=x+m-1;for(;i<=p;i++,j--){t=*i;*i=*j;*j=t;}}main(){inti,a[10],*p=a;for(i=0;i<10;i++,p++)scanf("%d",p);

p=a;

inv(p,10);

printf("Thearrayhasbeenreverted:\n");for(p=a;p<a+10;p++)printf("%d",*p);}例10:將數(shù)組a中的n個(gè)整數(shù)按相反順序存放(4)

實(shí)參用指針變量,形參用數(shù)組#include<stdio.h>voidinv(intx[],intn){intt,i,j,m=n/2;for(i=0;i<=m-1;i++){j=n-1-i;t=x[i];x[i]=x[j];x[j]=t;}}main(){inti,a[10],*p=a;for(i=0;i<10;i++,p++)scanf("%d",p);

p=a;

inv(p,10);printf("Thearrayhasbeenreverted:\n");for(p=arr;p<arr+10;p++)printf("%d",*p);}示例:inta[10],*p=a;則:p++/*p與&a[1]等價(jià)*/*p++/*結(jié)合性自右到左,++與*運(yùn)算級(jí)別相同;相當(dāng)于*(p++),作用是先得到P指向的變量的值(即*P),然后再執(zhí)行p+1—>p*/*(++p)/*先執(zhí)行p+1—>p,再執(zhí)行*p*/(*p)++/*先執(zhí)行*p,再執(zhí)行*p的值加1,p值不變*/#include<stdio.h>voidmain(){inta[10]={0,10,20,30,40,50,60},*p=a;printf(“%d\n”,*p++);printf(“%d\n”,*p);printf(“%d\n”,*(++p));printf(“%d\n”,(*p)--);printf(“%d\n”,*p);}010202019例11:逆序打印字符串算法:設(shè)字符串為q;令p指向串尾;打印字符*p,并將p向前移,直到p指向串首。#include<stdio.h>main(){char*p,*q=“Language”;

for(p=q;*p!=‘\0’;)p++;

for(p--;p>=q;p--)putchar(*p);putchar(‘\n’);}#include<stdio.h>#include<string.h>main(){char*p,*q=“Language”;intn;

n=strlen(q);p=q+n;

for(p--;p>=q;p--)putchar(*p);putchar(‘\n’);}例12:編寫(xiě)一個(gè)函數(shù)判斷一個(gè)字符串是否為回文(順讀與逆讀相同)。已知:字符串指針變量p(作參數(shù))結(jié)果:是(1)否(0)(返回值)算法:

1.令q指向最后一個(gè)字符;

2.若*p==*q,則兩指針向里靠攏,直到p>=q,則return1,否則return0#include<stdio.h>intishuiwen(char*p){char*q=p;

while(*q!=‘\0’)q++;q--;

while(p<q){if(*p==*q){p++;q--;}else{return0;}

}return1;}#include<stdio.h>intishuiwen(char*p){char*q=p;

while(*q)q++;

q--;

while(p<q){if(*p++!=*q--){return0;}

}return1;}‘\0’字符的ASCII碼是0例13.注意使用的區(qū)別:

chard[10],*q;intx=5,*p=&x;d=“Hello!”;(

)q=“Hello”;(

)*q=“Hello”;(

)*p=100;(

)scanf(“%s”,d);(

)scanf(“%s”,q);(

)scanf(“%d”,p);(

)printf(“%s”,d);(

)

printf(“%s”,q);(

)printf(“%s”,*q);(

)printf(“%d”,p);(

)charstr[]={“Hello!”};(

)charstr[]=“Hello!”;(

)charstr[]={‘B’,‘o’,‘y’};(

)char*cp=“Hello”;(

)inta[]={1,2,3,4,5};(

)int*p={1,2,3,4,5};(

)charstr[10],*cp;inta[10],*p;str=“Hello”;(

)cp=“Hello!”;(

)a={1,2,3,4,5};(

)p={1,2,3,4,5};(

)例14用指向字符串的指針變量實(shí)現(xiàn)字符串的輸出。#include<stdio.h>voidmain(){chars[]=“VC++6.0”,*p;p=s;printf("%s\n",s);printf("%s\n",p);}#include<stdio.h>voidmain(){char*s1=“VC++6.0";

s1+=2;printf("%s\n",s1);}

例15

輸出字符串中的部分?jǐn)?shù)據(jù)運(yùn)行結(jié)果++6.0#include<stdio.h>voidmain(){chara[20],b[20],*p1,*p2;gets(a);p1=a;p2=b;

for(;*p1!='\0';p1++,p2++)*p2=*p1;*p2='\0';printf("stringais:%s\n",a);printf("stringbis:%s\n",b);}例16將字符串a(chǎn)復(fù)制到字符串b。a[0]b[0]\0a[0]

P1

P2\0

P1

P2

P1

P2

strcpy(p2,p1);例17

有一行字符,要求刪去指定的字符。#include<stdio.h>voidmain(){voiddel_ch(char*p,charch);chars[80],*pt=s,ch;printf("請(qǐng)輸入一個(gè)字符串:\n");gets(s);printf("請(qǐng)輸入要被刪除的字符:\n");scanf(“%c”,&ch);

del_ch(pt,ch);

printf("新的字符串為:\n%s\n",s);}voiddel_ch(char*p,charch){char*q=p;for(;*p!='\0';p++)if(*p!=ch)*q++=*p;*q='\0';}例18

:閱讀下列源程序,請(qǐng)寫(xiě)出運(yùn)行結(jié)果。

#include<stdio.h>voidmain(){chara[]=”ABCD”,*p=&a[3];while(p>=a)printf(“%s\n”,p--);}

例19

:閱讀下列源程序,請(qǐng)寫(xiě)出運(yùn)行結(jié)果。

#include<stdio.h>voidmain(){chars[]=”159”,*p=s;printf(“%c”,*p++);printf(“%c”,*p++);}

結(jié)果:15例20閱讀下列源程序,寫(xiě)出運(yùn)行結(jié)果。

#include<stdio.h>voidprt(int*m,intn){intj;for(j=0;j<n;j++)m[j]++;}voidmain(){inta[]={1,2,3,4,5},j;

prt(a,5);for(j=0;j<5;j++)printf(“%d”,a[j]);}23456例21下面程序段的運(yùn)行結(jié)果是?

chars[80],*sp=“HELLO!”;sp=strcpy(s,sp);s[0]=‘h’;puts(sp);#include<stdio.h>#include<string.h>voidfun(char*p);inti,m,n; chara[100],b[100],*p,*q;voidmain(){printf("請(qǐng)輸入一字符串:\n"); gets(a); printf("請(qǐng)輸入m值:\n"); scanf("%d",&m); n=strlen(a); if(m<=n) { fun(q); printf("新字符串為:\n"); puts(b); } elseprintf("輸入m值不合法\n");}voidfun(char*q){

溫馨提示

  • 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)論