ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:20.83KB ,
资源ID:24621609      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24621609.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C经典指针习题.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C经典指针习题.docx

1、C经典指针习题指针本章重要知识点:1. 一个变量的地址称为该变量的指针。指针变量定义的一般形式为: 类型标识符 *变量名int *i_point;2. * 在定义语句中只表示变量的类型是指针,没有任何计算意义。 * 在语句中表示“指向”。&表示“地址”。3. 指针变量只能存放地址,不要将非地址数据赋给指针变量。 int *p; p=100; 4. +, - -, * 优先级相同,都是右结合性。int a=3, *p; p=&a;(1)(*p)+; 相当于a+。表达式为3, a=4 (2)*p+; *(p+)首先*p ,然后p=p+1,指针指向下一个int单元 表达式为3, (3)+*p +(*

2、p) *p=*p+1 a=4 (4)*+p *(+p),首先:p=p+1, 然后取*p。即取p所指的下一个int单元的内容。5. 指针变量作为函数参数 (1)函数的参数可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。 (2)指针变量作为函数参数与变量本身作函数参数不同,变量作函数参数传递的是具体值,而指针作函数参数传递的是内存的地址。 (3)用指针变量作函数参数,在被调函数的执行过程中,应使指针变量所指向的参数值发生变化,这样,函数在调用结束后,其变化值才能保留回主调函数。 (4)函数调用不能改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。 (5)用指针变量作函数参数

3、,可以得到多个变化了的值。注意:如果函数的形参是指针类型,那么实参传递过去的一定是地址(二级上机改错题必考类型)6. 数组的指针和指向数组的指针变量数组名就是数组的起始地址;又规定:数组的指针就是数组的起始地址。数组元素的指针就是数组元素的地址。(1)指向数组元素的指针变量的定义与赋值 int a10, *p; p=a; (2) p+1指向数组的下一个元素,而不是下一个字节7. 数组名作函数参数(重点,难点)(1) 数组名可以作函数的实参和形参,传递的是数组的地址。这样,实参、形参共同指向同一段内存单元,内存单元中的数据发生变化,这种变化会反应到主调函数内。(2) 在函数调用时,形参数组并没有

4、另外开辟新的存储单元,而是以实参数组的首地址作为形参数组的首地址。这样形参数组的元素值发生了变化也就使实参数组的元素值发生了变化。8. 指向二维数组的指针和指针变量int a34; (1) a为二维数组名,a+1为a1的地址,也就是数组第一行的地址,所以a为行指针。a为行指针,加1移动一行。(2) a1为一维数组名,a1+1为a11的地址,也就是数组第一行第一列的地址, 所以a1为列指针。(3) *a或a0为列指针,加1移动一列(4) a, a+0 , *(a+0), a0, &a00表示的都是二维数组的首地址。 (5) 注意二维数组的各种表示法,a为常量。*(a+i)与ai等价9 指向由m个

5、整数组成的一维数组的指针变量,int (*p)m; 注意,p为行指针,可以直接将二维数组名a赋给p。这样,a与p等同。如有anm,可以令p=a;10. 字符串的指针和指向字符串的指针变量(1) char string =“I love China”;(合法,string为数组名,代表数组的首地址,是常量。)(2) char string20;string=I love China;(非法表示,常量不能赋值)正确的写法:strcpy(string, I love China);(3) 用字符指针表示字符串 char *string=“I love China”;(合法,将内存中字符串常量的首地址

6、赋给一个指针变量) 另一种写法:char *string; string=“I love China”;(指针变量赋值,合法) 第3种写法:char *string; gets(string);(非法,指针未赋值就作指向运算)11. 函数的指针和指向函数的指针变量(1)函数在编译时被分配给一个入口地址。这个入口地址就称为函数的地址,也是函数的指针。像数组一样,C语言规定,函数名就代表函数的入口地址(2) 专门存放函数地址的指针变量称为指向函数的指针变量 函数类型 (*指针变量名)(参数类型 ); int (*p)( int, int); int max (int x, int y) retur

7、n xy?x:y; p=max;( 这时,指针变量p中放的是max函数在内存中的入口地址。)12. 返回指针值的函数(1) 被调函数返回的不是一个数据,而是一个地址。所以函数的类型为指针类型。 类型标识符 *函数名(参数表)13. 指针数组和指向指针的指针(1) 指针数组中的每一个元素都是指针变量,可以放地址。 类型标识 *数组名数组长度说明 int *p4; p为数组名,内有四个元素,每个元素可以放一个int型数据的地址 (2) 指向指针的指针变量(或称为二级指针)int i,*p; p=&i;同样,p也有地址,可以再引用一个指针变量指向它。prt=&p; 称prt为指向指针的指针变量。其基

8、类型是指向整型数据的指针变量,而非整型数据。总结:(1) 指针变量可以有空值,即指针变量不指向任何地址 p=NULL(2) 两指针可以相减,不可相加。若要进行相减运算,则两指针必须指向同一数组,相减结果为相距的数组元素个数(3) 指向同一数组的两个指针变量可以比较大小(4) 通过行指针引用二维数组元素(本章的难点,重点)int a34, *p3, (*pp)4, *prt;for(i=0;i3;i+) pi=ai;pp=a;prt=p;(1)a:二维数组名,常量(2)p:指针数组名,常量(3)pp:指向具有四个元素的一维数组的指针变量(4)prt :指向指针的指针变量本章习题(1)有以下程序

9、main() int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r; coutmn*p*q; 程序运行后的输出结果是 A)1,2,1,2 B)1,2,2,1 C)2,1,2,1 D)2,1,1,2(2)若有定义语句:int a410,*p,*q4;且0i4,则错误的赋值是 A)p=a B)qi=ai C)p=ai D)p=&a21(3)有以下程序 #include #include main() char str 20=“One*World”, “One*Dream!”,*p=str1; coutstrlen(p)c C)c=getchar(); D)*c=”stri

10、ng”;(7)有以下程序 main() char *s=ABC; do cout*s%10);s+; while (*s);注意:字母A的ASCII码值为65。程序运行后的输出结果是A)5670B)656667C)567D)ABC(8)有以下程序 void fun(char *s) while(*s) if (*s%2=0) cout*s; s+; main() char a=good; fun(a); 注意:字母a的ASCII码值为97,程序运行后的输出结果是A)dB)goC)godD)good(9)有以下程序void fun(int *a,int *b) int *c; c=a;a=b;b

11、=c;main() int x=3,y=5,*p=&x,*q=&y; fun(p,q); cout*p*q; fun(&x,&y); cout*p*q;程序运行后输出的结果是A)3,5,5,3 B)3,5,3,5 C)5,3,3,5 D)5,3,5,3(10)有以下程序 void f(int *p,int *q);main() int m=1,n=2,*r=&m; f(r,&n); coutmn;void f(int *p,int *q)p=p+1;*q=*q+1;程序运行后的输出结果是A)1,3B)2,3C)1,4D)1,2(11)以下函数按每行8个输出数组中的数据 void fun(int

12、 *w,int n) int i; for(i=0;in;i+) _ coutwi; 下划线出应填入的语句是A)if(i/8=0) coutendl;B)if(i/8=0) continue;C)if(i%8=0) coutendl;D)if(i%8=0) continue;(12)若有以下定义int x10,*pt=x;则对数组元素的正确引用是A)*&x10B)*(x+3)C)*(pt+10)D)pt+3(13)有以下程序 main() char *a=abcd,ef,gh,ijk;int i; for(i=0;i4;i+) cout*ai);程序运行后的输出结果是A)aegiB)dfhkC

13、)dfhkD)abcdefghijk(14)以下选项中正确的语句组是A)char s;s=BOOK!;B)char *s;s=BOOK!;C)char s10;s=BOOK!;D)char *s;s=BOOK!;(15)有以下程序 int b=2;int fun(int *k) b=*k+b;return (b);main() int a10=1,2,3,4,5,6,7,8,i;for(i=2;i4;i+) b=fun(&ai)+b; coutb;程序运行后的输出结果是A)10 12B)8 10C)10 28D)10 16(16)若有定义语句:double x5=, *p=x;则错误引用x 数

14、组元素的是( )。A)*p B)x5 C)*(p+1) D)*x(17)有以下程序 #include int fun(int n) int *p;p=(int*)malloc(sizeof(int);*p=n; return *p;main() int a;a = fun(10); couta+fun(10);程序的运行结果是( )。A)0 B)10 C)20 D)出错(18)有以下程序 int fun(int (*s)4,int n, int k) int m, i;m=s0k;for(i=l; im) m=sik;return m;main() int a44=1,2,3,4),11,12

15、,13,14,2l,22,23,24,31,32,33,34;cout fun(a,4,0);程序的运行结果是( )。A)4 B)34 C)31 D)32(19)以下程序的输出结果是_ 。 main() int j, a=1,3,5,7,9,11,13,15,*p=a+5;for(j=3; j; j-) switch(j) case 1:case 2: cout*p+; break;case 3: cout*(-p);(20)以下程序的输出结果是 _ 。 #define N 5int fun(int *s, int a, int n) int j;*s=a; j=n;while(a!=sj)j

16、-;return j;main() int sN+1; int k;for(k=l; k=N; k+) sk=k+l;coutfun(s,4,N);(21)有以下程序 main()int a=1,2,3,4,y,*p=&a3;-p; y=*p; couty= y;程序的运行结果是( )。A)y=0 B)y=1C)y=2 D)y=3(22)设有如下程序段char s20= Beijing, *p;p=s;则执行p=s;语句后,以下叙述正确的是( )。A)可以用*p 表示s0B)s 数组中元素的个数和p 所指字符串长度相等C)s 和p 都是指针变量D)数组s 中的内容和指针变量p 中的内容相同(2

17、3)有以下程序 #include void fun(char *s,int n)char *t;int i,j;for(i=0;in-1;i+)for(j=i+1;jstrlen(sj) t=si;si=sj;sj=t;main()char *ss=bcc,bbcc,xy,aaaacc,aabcc;fun(ss,5); coutss0ss4;程序的运行结果是( )。A)xy,aaaacc B)aaaacc,xyC)bcc,aabcc D)aabcc,bcc(24)有以下程序 void fun(char *a,char *b)while(*a=*)a+;while(*b=*a)b+;a+;mai

18、n()char *s=*a*b*,t80;fun(s,t);puts(t);程序的运行结果是( )。A)*a*b B)a*bC)a*b* D)ab(25)设有定义语句int (*f)(int);,则以下叙述正确的是( )。A)f 是基类型为int 的指针变量B)f 是指向函数的指针变量,该函数具有一个int 类型的形参C)f 是指向int 类型一维数组的指针变量D)f 是函数名,该函数的返回值是其类型为int 类型的地址(26)以下程序的输出结果是 _。void swap(int *a,int *b)int *t;t=a;a=b;b=t;main()int i=3,j=5,*p=&i,*q=&

19、j;swap(p,q); cout*p*q;(27)以下程序的输出结果是_ 。 main()int a5=2,4,6,8,10,*p;p=a;p+;cout*p; (29)设有定义:char p =1, 2, 3, *q=p;,下列不能计算出一个char 型数据所占字节数的表达式是( )。A)sizeof(p) B)sizeof(char)C)sizeof(*q) D)sizeof(p0)(30) 有下列函数:int aaa(char *s) char *t=s;while( *t+ +);t - -;return(t-s);下列关于aaa 函数的功能的叙述正确的是( )。A)求字符串s 的长

20、度 B)比较两个串的大小C)将串s 复制到串t D)求字符串s 所占字节数(31)有下列程序: void fun(char * *p) + +p; cout*p;main( ) char *a =(Morning,Afternoon,Evening,Night);fun(a);程序的运行结果是( )。A)Afternoon B)fternoon C)Morning D)orning(32)若有定义语句:int a23,*p3;,则下列语句中正确的是( )。A)p=a; B)p0=a;C)p0=&a12; D)p1=&a;(33)有下列程序: void fun(int *a,int n)/*fu

21、n 函数的功能是将a 所指数组元素从大到小排序*/ int t,i,j;for(i=0;in-1;j+ +)for(j=i+1;jn;j+ +)if(aiaj) t=ai;ai=aj;aj=t;main( ) int c10=1,2,3,4,5,6,7,8,9,0,i;fun(c+4,6);for(i=0;i10;i+ +) coutci;程序的运行结果是( )。A)1,2,3,4,5,6,7,8,9,0, B)0,9,8,7,6,5,1,2,3,4,C)0,9,8,7,6,5,4,3,2,1, D)1,2,3,4,9,8,7,6,5,0,(34)有下列程序: int fun(char s )

22、 int n=0;while(*s=0) n=10*n+*s-0;s+ +;return(n);main( ) char s10=6,1,*,4,*,9,*,0,*;coutfun(s);程序的运行结果是( )。A)9 B)61490 C)61 D)5(35)有下列程序: void fun(char *t,char *s) while(*t! =0) t+ +;while(*t+ + =*s+ +)! =0);main( ) char ss10=acc,aa10=bbxxyy;fun(ss,aa); coutssaa;程序的运行结果是( )。A)accxyy,bbxxyy B)acc,bbxx

23、yyC)accxxyy,bbxxyy D)accbbxxyy,bbxxyy(36)有下列程序: void fun(int n,int *p) int f1,f2;if(n= =1|n= =2) *p=1;else fun(n-1,&f1); fun(n-2,&f2);*p=f1+f2;main( ) int s;fun(3,&s); couts;程序的运行结果是( )。A)2 B)3 C)4 D)5(37)下列程序的输出结果是 _ 。 #include char *fun(char *t) char *p=t;return (p+strlen(t)/2); main( ) char *str=abcdefgh;str=fun(str);puts(str);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1