第五章指針 習(xí)題解答_第1頁
第五章指針 習(xí)題解答_第2頁
第五章指針 習(xí)題解答_第3頁
第五章指針 習(xí)題解答_第4頁
第五章指針 習(xí)題解答_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、習(xí)題解答第五章 指 針1、指針的基類型定義了該指針?biāo)赶蜃兞康念愋汀募夹g(shù)上講,任何類型的指針均可指向內(nèi)存中的任何位置,但因所有的指針運(yùn)算都是與它的基類型相關(guān)聯(lián)的,所以正確說明指針非常重要。(1)基類型使指針只能指向基類型定義的一類變量。(2)限制引用操作滿足基類型的約束(范圍、運(yùn)算、內(nèi)存表示)。(3)限制指針移動操作的跨度。 2、(1)通過指針引用數(shù)組元素是C語言提供的一種高效數(shù)組訪問機(jī)制,通過帶下標(biāo)的指針變量引用一維數(shù)組元素。 (2)通過指針指向數(shù)組或數(shù)組元素的地址完成各種賦值、引用、移動、比較等操作。數(shù)組名在C語言中被處理成一個地址常量,也就是數(shù)組所占連續(xù)存儲單元的起始地址,一旦定義,數(shù)

2、組名永遠(yuǎn)是數(shù)組的首地址,在其生存期不會改變??梢酝ㄟ^數(shù)組首地址引用數(shù)組元素,輸出數(shù)組中全部元素。也可以將數(shù)組名與數(shù)組指針賦值完成各種操作。3、(1)指針數(shù)組定義形式為int   *   asize;實(shí)質(zhì)是一個數(shù)組,共有size個元素,其中每個元素都是指針類型的,并且每個元素的基類型是整型。(2)數(shù)組指針定義形式為int   (*p)size;實(shí)質(zhì)是一個變量,是一個指針變量,這個指針變量的基類型是size 個int類型元素的數(shù)組。簡單的說數(shù)組指針是一個指針,它指向一個數(shù)組,通過這個指針可以對數(shù)組進(jìn)行多種操作,和使用數(shù)組下標(biāo)起到相同的作用,這個指針最初指向數(shù)組第一個元

3、素;指針數(shù)組就是一個數(shù)組,它里邊的元素都是指針。舉例如下:int   *p5;   /   指針數(shù)組,p是數(shù)組名,數(shù)組里放5個int指針。int  (*p)5; /   數(shù)組指針,p是指針名,指向一個有5個int元素的數(shù)組。4、(1)int *p;/定義了一個基類型為整型的指針變量p即p是整型指針。(2)int *p5;/定義了一個指針數(shù)組p,數(shù)組中含有5個基類型為整型的指針,即p是5個元素的數(shù)組,數(shù)組元素是整型指針。(3)int (*p)5; 定義了一個數(shù)組指針p,p指向一個含有5個整型元素的數(shù)組,即p是指針,指向數(shù)組,數(shù)組有5個整型元素。(

4、4)int *fp();定義了一個函數(shù)fp,函數(shù)的返回值是個指向整型變量的指針變量。(5)int (*fp)(); 定義一個指向函數(shù)的指針變量fp,返回值為整型。(6)int * (*fp)(); fp是指針,指向返回類型為整型指針的函數(shù)。(7)void *fp();fp是函數(shù),函數(shù)返回通用指針。(8)int *p;定義了一個指向指針的指針p,p為整型指針的指針,即p是指針,指向一個整型指針。5、(1)1 2 3 4 5 6 7 8 9 10 11 12(2)11,11,11 (3)edcba(4) 1 3 5 76、# include<stdio.h> # include<

5、conio.h> void main() char *p,x100,c; clrscr();p=x; while(c=getchar()!='n') *p=c; p+; p-; while(p!=x-1) printf("%c",*p); p-; 7、# include<stdio.h> # include<conio.h> main() char str100,*p; int i=0; printf("Please input string:"); clrscr(); gets(str); p=str; w

6、hile(*p+='0') i+; printf("The length of the string is %d:",i);8、第一問參考第5題第(1)小題和例5-5。第二問將第5題第(1)小題指針指向改為*p=&a23,指針輸出改為 *p即可。亦可參考如下:#indude<tdio.h>void main() int a1010,i,j,*p,n; for( i0;i10;i) for( j0;j10;j) *(*(ai )j)i*10j; n0; for( p&a99;p&a00;p) printf(" 5d

7、",*p ); if(n 10 0) printf("n"); 利用指向行數(shù)組的指針變量可重寫為:#include <stdio.h>void main() int a1010,i,j,*p; int (*pp ) 10; ppa; for( i0;i10;i ) for( j0;j10;j ) *(*ppj )i*10j; p; for(p *pp1;pa0;p ) printf( "5d",*p ); if( pa0 ) 10 0 ) printf( "n"); 9、#include "conio.

8、h"main( ) int month,day,ry1=0,ry2=0; int i,*p;int days212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31; printf("please input the right month and the right day:n"); scanf("%d,%d",&month,&day); clrscr(); p=days; if(month<1|month>12) pri

9、ntf("error month!n"); else if (month=2&&day=29) printf("the %d month %d day is not exist in the norun year!n",month,day); ry2=60; printf("the %d month %d day is %d day in the run year!n",month,day,ry2); else if(day<1|(day>days0month-1|day>days1month-1)p

10、rintf("the error day!n"); else for(i=0;i<month-1;i+) ry1+=*p+; ry1+=day; p=&days10; for(i=0;i<month-1;i+) ry2+=*p+; ry2+=day;printf("the %d month %d day is %d day in the norun year!n",month,day,ry1);printf("the %d month %d day is %d day in the run year!n",mont

11、h,day,ry2); 利用指針與函數(shù)可重寫為:#include <stdio.h>int days(int (*p)13,int year,int month,int day);void main( ) int y,m,d,n; static int day_tab213 0,31,28,31,30,31,30,31,31,30,31,30,31, 0,31,29,31,30,31,30,31,31,30,31,30,31;printf("Input:year? month? day? n "); scanf("ddd",&y,&a

12、mp;m,&d ); ndays(day_tab,y,m,d ); printf("It is d day n",n );int days(int ( *p )13,int year,int month,int day ) int j,leap; leap year 40 && year 100!0 | year 4000; for( j1;jmonth;j ) day *(*(pleap )j ); return(day);10、main( ) int n ; char *name ="illagal month" ,"

13、;January" ,"February" ,"March ","April ","May ","June ","July","August" ,"September" ,"October ","November" ,"December" ; printf("please input the month:"); scanf("%d&quo

14、t;,&n); printf("%d month : %sn ", n ,(n<1 | n>12)? name0 : namen);11、整個過程主要分為以下幾步:讀入全部正文,將它排序,按排好的順序輸出它們。下圖給出字符指針數(shù)組與相應(yīng)正文的關(guān)系:#include stdio.h>#include stdlib.h>#include string.h>#define NULL 0#define LINES 100 #define MAXLEN 1000int readlines(char *lineptr,int maxlines);v

15、oid writelines(char *lineptr,int nlines);void sort(char *v,int n);int getline(char s,int lim);void main(void) char *lineptrLINES; int nlines; if(nlinesreadlines(lineptr,LINES)>0) sort(lineptr,nlines); writelines(lineptr,nlines); else printf("Input too big to sortn");int readlines(char *

16、lineptr,int maxlines) int len,nlines; char *p,lineMAXLEN; nlines0; while(lengetline(line,MAXLEN)0) if(nlines>maxlines) return(1); else if(p(char *)calloc(len,1)NULL) return(1); else linelen1'0'; /* Cancel newline */ strcpy(p,line); lineptrnlinesp; return(nlines);void writelines(char *lineptr,int nlines) while(nlines>0) printf("sn",*lineptr);void sort(char *v,int n) int gap,i,j; char *temp; for(gapn/2;gap

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論