C语言指针单元练习
- 格式:doc
- 大小:82.00 KB
- 文档页数:14
复习题(二)一、基础题1、设有:int k[]={2,4,6,8,10,12}, *p=k+2; 表达式*(p+2)*p[2] 的值:100 。
2、设有:int a[10], *p1, *p2; 则执行语句:p1=a; p2=&a[5]; 则p2-p1的值:5。
3、设有:int x[]={4,3,2,1},q,*p=&x[1];则执行语句:q=(*--p)++ ; 后;变量q的值为4。
4、设有:int *p, a=10, b=1; 则执行以下语句:p=&a; a=*p+b; 后;a的值为:11。
5、下列程序段的输出结果是2,1 。
int k=1, j=2, *p=&k, *q=p;p=&j;printf("%d, %d",*p, *q);6、设x为整型变量,p为指向整型的指针变量,则让p指向x变量的赋值表达式是P=&x。
7、设有变量定义:float d[]={1.0,2.0,3.0,4.0,5.0}, *p=d+3;请写出printf("\n %f %f", *p, d[0]); 的输出结果为:4.0和 1.0。
8、设有变量定义如下:char s[]="Hello!", *p=s; int i;执行完for(i=0; *(p+i); i++); 后,变量i的值是_6_;*(p+i)的值是‟\0‟_。
9、函数void f(char s[ ], char t[ ]){ int k=0;while (s[k]=t[k]) k++;}等价于void f(char *s, char *t)1、{ while (*s++=*t++); }二、选择题1、下面的程序段用来定义指针并赋值,请选出语法正确的程序段( C )。
A)int *p; scanf(“%d”,p); B)int *s,k; *s=100;C) int *s,k; D) int *s,kchar *p,*c; char *p,*c;s=&k; p=&c; s=&k; p=&c;*p=‟a‟; s=p; *s=1;2、程序段:int *p,a,b=1; p=&a; *p=10; a=*p+b; 执行后,a的值(B)。
一、单选题1、若有说明:int n = 2,*p = &n,*q = p;则以下非法的赋值语句是()A.p = q;B.p = n;C.n = *q;D.*q = 3;正确答案:B解析:B、p为指针类型,即“地址箱”,要保存地址,而n为整型数,类型不匹配。
2、若有以下定义:int x, *pb;则正确的赋值表达式是()A.*pb = *x;B.pb = x;C.pb = &x;D.*pb = &x;正确答案:C解析:A、x是整型变量,普通变量前面加*,这是错误的,没有该语法D、运行时错误。
正确的是pb = &x; x的地址应放到“地址箱”即指针变量pb中,一定要注意“地址箱”即指针变量为pb,而非*pb。
如果写成*pb = &x;会出现什么问题呢?pb为随机指向的“野指针”,即随机指向一个空间,该语句试图吧&x 放入到该随机空间中,报运行时错误3、若定义:int a =511,*b = &a; 则printf("%d\n",*b); 的输出结果为()A.511B.无确定值C.512D.a的地址正确答案:A解析:A、b是指针变量,保存a的地址,那么*b就是a4、下面能正确进行字符串赋值操作的是()A.char *s;s ="abcde";B.char *s;scanf("%s",s);C.char s[5] ={'a','b','c','d','e'};D.char s[5] = {"abcde"};正确答案:A解析:B、编译不报错,运行时错误。
原因s指针随机指向一个空间,即野指针,不能试图把一个字符串输入到该随机空间中,运行时报错C、语法正确,但数组s中由于缺少字符串结束符'\0',故村的不是字符串,而是5个独立的字符。
指针习题1一、选择题(每题5分,共60分)1.有以下程序#inc lude<stdi o.h>main(){in t n,*p=NUL L;*p=&n;pri ntf("Input n:"); sca nf("%d",&p); pr intf("outp ut n:"); p rintf("%d\n",p);}该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是。
A)int n,*p=NULL; B)*p=&n; C)s canf("%d",&p) D)pri ntf("%d\n",p);2.有以下程序#incl ude <stdio.h>m ain(){ in t m=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;pr intf("%d,%d,%d,%d\n",m,n,*p,*q);}程序运行后的输出结果是A)1,2,1,2 B)1,2,2,1 C)2,1,2,1 D)2,1,1,23.以下程序段完全正确的是A)int *p; scan f("%d",&p);B)i nt *p; sc anf("%d",p);C)int k, *p=&k; s canf("%d",p);D)intk, *p; *p= &k; sc anf("%d",p);4.以下程序段完全正确的是A)int*p; scanf("%d",&p);B)in t *p; sca nf("%d",p);C)i nt k, *p=&k; s canf("%d",p);D)intk, *p; *p= &k; sc anf("%d",p);5.若有以下函数首部( )。
C语言习题集答案(指针)第五章指针习题一.选择题1. 若定义int a=8,b,*p=&b; 则下面对赋值语句p=&a; *p=a; 的正确解释为【】。
A)两个语句都是使p指向aB)p=&a;是使p指向a,而*p=a是将a的值赋予*pC)两个语句都是将a的值赋予*pD)p=&a是将a的值赋予*p,而*p=a是使p指向a2. 若定义int b=8,*p=&b; 则下面均表示b的地址的一组选项为【】。
A)*p, *&b B)*p, &*bC)p, *&b, &*p D)&*p, p, &b3. 若定义int a,b,*p1=&a,*p2=&b; 使p1指向b的赋值语句是【】。
A)*p1=&b; B) p1=&p2;C)p1=*&p2; D) p1=*&b;4. 若定义int a,b,*p; 下述程序段中正确的是【】。
A)p=&a; scanf("%d",&p); B)scanf("%d",&a); *p=a;C)p=&a; scanf("%d",&b);*p=b; D)p=&a; scanf("%d",*p);5. 若有定义int a=7,b=9,*p1,*p2;下列赋值语句中,正确的是【】。
A)p2=&a;p1=&b;*&a=*p1; B)p1=&a;p2=*&p1;a=&*p2;C)p1=&b;p2=&p1;*p1=*p2; D)p2=*&a;p1=*&b;6. 执行下面程序段后,c的值是【】。
int a,b,c,*p;a=2;b=10;p=&a;c=a+b+*p;A)12 B)14 C)22 D)247. 若定义int i,*p; 使p指向i的赋值语句是【】。
36 C语言(指针)单元练习五(答案见底)1 下列语句的输出结果是______。
int **pp,*p,a=5,b=8;pp=&p;p=&a;p=&b;printf("%d,%d",*p,**pp);A. 5,8B.8,5C. 8,8D. 5,52 如下程序的输出结果是______。
#include <stdio.h>#include <ctype.h>#include <string.h>void fun(char *p){ int i,k;char s[30];for(i=0,k=0;p[i]!='\0';i+=2)if(!isspace(*p+i)&&(*(p+i)!='a'))s[k++]=p[i];s[k]='\0';strcpy(p,s);}main(){ char s[30]="p r o g ra m e";fun(s);puts(s);return;}A. programeB. progrC. ameD. emargorp3 以下语句的输出结果是______。
char s[ ]="one",*p=s;printf("%d\n",*(p+3));A. 字符e的地址B. 0C. 12D. 204 以下函数的功能是比较两个字符串s和t的大小,函数中应填入______。
comp(char *s, char *t){ for (;*s==*t;______)if (*s=='\0')return(0);return(*s-*t); }A. s++B. t++C. s++;t++D. s++,t++5 以下程序段的结果为______。
static char s[ ]="language";char *p;for(p=s;p<s+8;p+=2)putchar(*p);A. languageB. lnugC. agaeD. 语法错误6 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是______。
第七章指针7.1 选择题1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。
A. p=q; B. *p=*q; C. a=*q; D. q=a;a是整型数,int *p,*q定义了指针,p,q是指向整型的指针.p取得a的地址,而q取得p的地址p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值).A)把q的地址赋给p,则p和q完全一样了,都指向一个数2B)把q中数据个pC)把q中数据给aD)a中数据是2,不能够给一个地址。
除非*q=a2.若定义:int a=511, *b=&a;,则printf("%d\n”, *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511int a=511,*b=&a;a 是整形变量b 是整形指针变量,指向 aprintf("%d\n",*b);就是输出指针变量 b,所指变量的值输出结果5113.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。
A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2);47、已知在程序中定义了如下的语句:int *P1,*P2;int k;p1=&k;p2=&k;则下列语句中不能正确执行是( B )A、k=*P1+*P2;B、p2=k;C、P1=P2;D、K=*P1 * (*P2);P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢?A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K)C是赋值语句D其实执行了K=K*K4.变量的指针,其含义是指该变量的(B)。
A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。
班级:学号:姓名:《C程序设计》单元练习(指针)一、选择题1、若有定义: int x,*pb;则以下正确的赋值表达式是。
(1)pb=&x (2)pb=x (3)*pb=&x (4)*pb=*x2、以下程序的输出结果是main(){ int k=2,m=4,n=6;int *pk=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);printf(“%d\n”,n);}(1)4 (2)6 (3)8 (4)103、已知指针P的指向如下图所示,则执行*P++;后*P的值是。
a[0] a[1] a[2] a[3] a[4](1)20 (2)30 (3)21 (4)314、以下程序的输出结果是。
void sub(int x,int y,int *z){ *z=y-x;}main(){ int a,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printf(“%d,%d,%d\n”,a,b,c);}(1)5,2,3 (2)-5,-12,-7 (3)-5,-12,-17 (4)5,-2,-75、以下程序的输出结果是。
void prtv(int *x){ printf(“%d\n”,++*x);}main( ){ int k=25; prtv(&k):}(1)23 (2)24 (3)25 (4)266、以下程序的输出结果是。
void fun(float *a,float *b){ float w;*a=*a+*a; w=*a; *a=*b; *b=w;}main(){ float x=2.0,y=3.0;float *px=&x,*py=&y;fun(px,py);printf(“%2.0f,%2.0f\n”,x,y); }(1)4,3 (2)2,3 (3)3,4 (4)3,27、下程序的输出是。
c 指针练习题C 指针练习题1. 介绍在C语言中,指针是一种非常重要的概念。
通过指针,我们可以直接访问和操作内存中的数据。
本文将为您提供一些C指针练习题,以帮助您更好地理解和掌握指针的用法。
2. 指针基础题2.1 编写一个程序,声明一个整型变量x,并定义一个指向该变量的指针p。
通过指针p修改变量x的值,并输出修改后的结果。
2.2 编写一个程序,声明一个整型数组a,并定义一个指向数组元素的指针p。
通过指针p遍历数组,并输出每个元素的值。
2.3 编写一个程序,声明一个字符型数组str,并定义一个指向字符串的指针p。
通过指针p遍历字符串,并输出每个字符。
3. 指针与函数题3.1 编写一个函数swap,交换两个整型变量的值。
在主函数中调用该函数,并输出交换后的结果。
3.2 编写一个函数reverse,接受一个字符型字符串作为参数,并将其逆序存储。
在主函数中调用该函数,并输出逆序后的字符串。
4. 动态内存分配题4.1 编写一个程序,使用malloc函数动态分配一个包含10个整型元素的数组,并通过指针遍历数组,并输出每个元素的值。
4.2 编写一个程序,使用calloc函数动态分配一个包含5个双精度浮点数的数组,并通过指针遍历数组,并输出每个元素的值。
4.3 编写一个程序,使用realloc函数动态分配一个包含5个整型元素的数组,并增加3个元素。
然后通过指针遍历数组,并输出每个元素的值。
5. 多级指针题5.1 编写一个程序,声明一个字符型变量c,并定义一个指向该变量的一级指针p1和一个指向p1的二级指针p2。
通过p2修改变量c的值,并输出修改后的结果。
6. 总结通过以上指针练习题,我们可以加深对C指针的理解和应用。
掌握指针的用法对于C语言编程非常重要,它能够提高程序的效率和灵活性。
希望本文能够帮助您更好地理解和运用C指针的知识。
祝您在C语言的学习中取得更好的成果!。
《C程序设计》函数单元练习学号姓名一、选择题1、对于同类型的指针变量P1和P2,不可能进行的运算是A.p1-p2 B. p1=p2C. p1+p2D. p1==p22、下列不正确的定义是A. int *p=&i,i;B. int *p=0, i;C. int i, *p=&i;D. int t, *p=0;3、下列正确的定义是A. int x=3,*p=1;B. int x=3,*p=0;C. int x=3,*p=x;D. int *p=&x=3;4、下列语句定义p为指向float类型变量d的指针,其中正确的是A. float d=0,*p=d;B. float d=0,*p=&d;C. float *p=&d,d=0;D. float d=0,p=d;5、对语句“int a[10],*p=a;”,下列表述中正确的是A. *p被赋初值为a数组的首地址B. *p被赋初值为数组元素a[0]的地址C. p被赋初值为数组元素a[1]的地址D. p被赋初值为数组元素a[0]的地址6、设有定义 int a=1, b, *p=&a; 则下列语句中使b不等于a的语句是A. b=*&a;B. b = *p;C. b=a;D. b = *a;7、p1指向某个整型变量,要使指针p2也指向同一变量,语句正确的是A. p2=p1;B. p2=**p1;C. p2=&p1;D. p2=*p1;8、假如指针p已经指向变量x,则&*p相当于A. xB. *pC. &xD. **p9、若有说明:int i, j=7,*p=&i; 则与 i=j;等价的语句是A. i=*p;B. *p=*&j;C. i=&j;D. i=**p;10、若有说明语句 int a[5], *p=a; 对数组元素的正确引用是A. a[p]B. p[a]C. *(p+2)D. p+211、假如指针p已经指向某个整型变量x,则(*p)++相当于A. p++B. x++C. *(p++)D. &x++12、若有以下定义,且0<=i<5, 则对数组元素地址的正确表示是int a[ ]={1,2,3,4,5},*p=a, i;A. &(a+i)B. a++C. &pD. &p[i]13、若有以下定义,则 *(p+5) 的值为char s[ ]=”Hello”, *p=s;A. '0'B. '\0'C. '0'的地址D. 不确定的值14、数组定义为“int a[4][5];”,引用“a+3”表示A. a数组第3列的首地址B. a数组第0行第3列元素的值C. 数组第3行的首地址D. a数组第0列第3行元素的值15、数组定义为“int a[4][5];”,引用“*(*a+1)+2”表示A. a[1][0]+2B. a数组第1行第2列元素的地址C. a[0][1]+2D. a数组第1行第2列元素的值16、设指针x指向的整型变量值为25,则printf("%d\n",++*x);的输出是A. 23B. 24C. 25D. 2617、下面各语句中,能正确进行赋字符串操作的语句是A. char s[5] ="ABCDE";B. char s[5] ={'A','B', 'C','D', 'E'};C. char *s; s="ABCDE";D. char *s; scanf("%s",&s);18、有定义如下:int a[5], *p; 则下列描述错误的是A.表达式p=p+1是合法的B.表达式a=a+1是合法的C.表达式p-a是合法的D.表达式a+2是合法的19、执行完C程序中的下列三条语句之后c指向int a, b, *c=&a; int *p= c; p= &b;A.p B. c C. b D.a20、字符串常量"ME"的字符个数为A.4 B. 3 C. 2 D. 121、下列对字符数组进行初始化的语句正确的是A.char a[]= “Hello”;B. char a[][]= {'H’,’e’,’l’,’l’,’o’};B.char a[5]=“Hello”;D. char a[2][5]= {"Hello","World"}22、下列关于指针运算的描述错误的是A.在一定条件下,两个指针可以相加B. 在一定条件下,两个指针可以进行逻辑判断C. 在一定条件下,指针可以为空值D. 在一定条件下,两个指针可以相互赋值23、int a= 10,*p=&a;语句中,p的值是A.10 B. 变量p的地址值C. 变量a的地址值D.无意义24、在下列四种字符串说明或赋值方式中,不正确的是:A. char *p;p=“I am a student”;B. char p1[8]={‘s’,’t’,’u’,’d’,’e’,’n’,’t’};C. char p2[20] ;p2=“I am a student”;D. char p3[ ]=“student”,p4[ ]=“teacher”;25、有说明语句char *name="newspaper"; 则可获取串中字符's'A. name[0]+3B. *name+3C. *(name+3)D. name[4]26、设有变量定义:int aval=2005;int *ap;double *dp;下面赋值正确的是A. ap=aval;B. *ap=&aval;C. dp=ap;D. *dp=*ap27、int a[ 3] [ 3] , *p, i; p=&a[0] [0] ; for(i=0; i<9; i++) p[i] =i; for(i=0;i<3; i++) printf("%d ", a[1] [i] ) ; 程序运行后的输出结果是A. 0 1 2B.1 2 3C. 2 3 4D.3 4 528、有以下程序int a[ 3] [ 3] , *p, i; p=&a [0] [0] ; for ( i=0 ; i<9 ; i++) p[i]=i+1; printf("%d\n", a[1] [2] ) ; 程序运行后的输出结果是A. 3B. 6C. 9D. 229、 int i, x[3] [3] ={ 9, 8, 7, 6, 5, 4, 3, 2, 1} , *p=&x[ 1] [ 1] ;for(i=0; i<4; i+=2) printf("%d ", p[i] ) ;的输出结果是A. 5 2B. 5 1C. 5 3D. 9 730、执行以下程序段后, int a[2] [3] ={ { 1, 2, 3} , { 4, 5, 6} } ; int m, *p; p=&a[0][0] ; m=(*p) *(*(p+2) ) *(*(p+4) ) ; m的值为A. 15B. 14C. 13D. 1231、指针可以用来表示数组元素,下列表示中____________是错误的。
已知:int a[3][7];A.*(a+1)[5]B.*(*a+3)C.*(*(a+1))D.*(&a[0][0]+2)32、设有说明语句“int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int *p=&a[0][0];”,能够正确表示数组元素a[2][2]的表达式是__________A.p[2][2]B.*(*(p+2)+2)C.*(p+10)D.*(p+8)33、以下程序执行后,a的值是_______。
main(){ int a,k=4,m=6,*p1=&k,*p2=&m;a=p1==&m;printf("%d\n",a);}A) 4 B) 1 C) 0 D) 运行时出错,a无定值34、下列程序的运行结果是_______ 。
void fun(int *a,int *b){ int *k;k=a;a=b;b=k;}main(){ int a=3,b=6,*x=&a,*y=&b;fun(x,y);printf("%d%d",a,b);}A) 63 B) 36 C) 编译出错D) 0035、设有以下程序:main(){ int a,b,k=4,m=6,*p1=&k,*p2=&m;a=p1==&m;b=(*p1)/(*p2)+7;printf("a=%d\n",a);printf("b=%d\n",b);}执行该程序后,a的值为【1】,b的值为【2】。
36、有以下程序void fun(char *c,int d){ *c=*c+1;d=d+1;printf("%c,%c,",*c,d);}main(){ char a='A',b='a';fun(&b,a);printf("%c,%c\n",a,b);}程序运行后的输出结果是_______。
A) B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b37、有以下程序int fa(int x){ return x*x; }int fb(int x){ return x*x*x; }int f(int (*f(1)(),int (*f2)(),int x){ return f2(x)-f1(x); }main(){ int i;i=f(fa,fb,2);printf("%d\n",i);}程序运行后的输出结果是___ ____。
A) -4 B) 1 C) 4 D) 838、若有一些定义和语句#include <stdio.h>int a=4,b=3,*p,*q,*w;p=&a;q=&b;w=q;q=NULL;则以下选项中错误的语句是_______。
A) *q=0; B) w=p; C) *p=va; D) *p=*w;39、有以下程序int *f(int *x,int *y){ if(*x<*y) return x;else return y;}main(){ int a=7,b=8,*p,*q,*r;p=&a;q=&b;r=f(p,q);printf("%d,%d,%d\n",*p,*q,*r);}执行后输出结果是_______。