第五章指针习题解答.doc

上传人:叶*** 文档编号:36232631 上传时间:2022-08-25 格式:DOC 页数:7 大小:42.50KB
返回 下载 相关 举报
第五章指针习题解答.doc_第1页
第1页 / 共7页
第五章指针习题解答.doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《第五章指针习题解答.doc》由会员分享,可在线阅读,更多相关《第五章指针习题解答.doc(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第五章指针 习题解答习题解答第五章 指 针1、指针的基类型定义了该指针所指向变量的类型。从技术上讲,任何类型的指针均可指向内存中的任何位置,但因所有的指针运算都是与它的基类型相关联的,所以正确说明指针非常重要。(1)基类型使指针只能指向基类型定义的一类变量。(2)限制引用操作满足基类型的约束(范围、运算、内存表示)。(3)限制指针移动操作的跨度。 2、(1)通过指针引用数组元素是C语言提供的一种高效数组访问机制,通过带下标的指针变量引用一维数组元素。 (2)通过指针指向数组或数组元素的地址完成各种赋值、引用、移动、比较等操作。数组名在C语言中被处理成一个地址常量,也就是数组所占连续存储单元的起

2、始地址,一旦定义,数组名永远是数组的首地址,在其生存期不会改变。可以通过数组首地址引用数组元素,输出数组中全部元素。也可以将数组名与数组指针赋值完成各种操作。3、(1)指针数组定义形式为int * asize;实质是一个数组,共有size个元素,其中每个元素都是指针类型的,并且每个元素的基类型是整型。(2)数组指针定义形式为int (*p)size;实质是一个变量,是一个指针变量,这个指针变量的基类型是size 个int类型元素的数组。简单的说数组指针是一个指针,它指向一个数组,通过这个指针可以对数组进行多种操作,和使用数组下标起到相同的作用,这个指针最初指向数组第一个元素;指针数组就是一个数

3、组,它里边的元素都是指针。举例如下:int *p5; / 指针数组,p是数组名,数组里放5个int指针。int (*p)5; / 数组指针,p是指针名,指向一个有5个int元素的数组。4、(1)int *p;/定义了一个基类型为整型的指针变量p即p是整型指针。(2)int *p5;/定义了一个指针数组p,数组中含有5个基类型为整型的指针,即p是5个元素的数组,数组元素是整型指针。(3)int (*p)5; 定义了一个数组指针p,p指向一个含有5个整型元素的数组,即p是指针,指向数组,数组有5个整型元素。(4)int *fp();定义了一个函数fp,函数的返回值是个指向整型变量的指针变量。(5)

4、int (*fp)(); 定义一个指向函数的指针变量fp,返回值为整型。(6)int * (*fp)(); fp是指针,指向返回类型为整型指针的函数。(7)void *fp();fp是函数,函数返回通用指针。(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 # include void main() char *p,x100,c; clrscr();p=x; while(c=getchar()!=n)

5、 *p=c; p+; p-; while(p!=x-1) printf(%c,*p); p-; 7、# include # include main() char str100,*p; int i=0; printf(Please input string:); clrscr(); gets(str); p=str; while(*p+=0) i+; printf(The length of the string is %d:,i);8、第一问参考第5题第(1)小题和例5-5。第二问将第5题第(1)小题指针指向改为*p=&a23,指针输出改为 *p即可。亦可参考如下:#indudevoid m

6、ain() 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,*p ); if(n 10 0) printf(n); 利用指向行数组的指针变量可重写为:#include 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

7、( pa0 ) 10 0 ) printf( n); 9、#include conio.hmain( ) 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(month12) printf(error

8、 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(daydays0month-1|daydays1month-1)printf(the error day!n); else for(i=0;imonth-1;i+) ry1+=*p+; ry1+=day; p=

9、&days10; for(i=0;imonth-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,month,day,ry2); 利用指针与函数可重写为:#include int days(int (*p)13,int year,int month,int day);void main( ) int y,m,d,n; static int da

10、y_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,&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( j

11、1;jmonth;j ) day *(*(pleap )j ); return(day);10、main( ) int n ; char *name =illagal month ,January ,February ,March ,April ,May ,June ,July,August ,September ,October ,November ,December ; printf(please input the month:); scanf(%d,&n); printf(%d month : %sn , n ,(n12)? name0 : namen);11、整个过程主要分为以下几步

12、:读入全部正文,将它排序,按排好的顺序输出它们。下图给出字符指针数组与相应正文的关系:#include stdio.h#include stdlib.h#include string.h#define NULL 0#define LINES 100 #define MAXLEN 1000int readlines(char *lineptr,int maxlines);void writelines(char *lineptr,int nlines);void sort(char *v,int n);int getline(char s,int lim);void main(void) cha

13、r *lineptrLINES; int nlines; if(nlinesreadlines(lineptr,LINES)0) sort(lineptr,nlines); writelines(lineptr,nlines); else printf(Input too big to sortn);int readlines(char *lineptr,int maxlines) int len,nlines; char *p,lineMAXLEN; nlines0; while(lengetline(line,MAXLEN)0) if(nlinesmaxlines) return(1);

14、else if(p(char *)calloc(len,1)NULL) return(1); else linelen10; /* Cancel newline */ strcpy(p,line); lineptrnlinesp; return(nlines);void writelines(char *lineptr,int nlines) while(nlines0) printf(sn,*lineptr);void sort(char *v,int n) int gap,i,j; char *temp; for(gapn/2;gap0;gap / 2) for(igap;in;i for(jigap;j0;j gap) if(strcmp(vj,vjgap)0) break; tempvj; vjvjgap; vjgaptemp; int getline(char s,int lim) int c,i; for(i0;ilim1&(cgetchar()!EOF&c!n;i) sic; if(cn) sic; i; si0; return(i);7 / 77

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com