第8章善于利用指针
一、单项选择题
1.语句int *p;说明了。
A)p是指向一维数组的指针B)p是指向函数的指针,该函数返回一int型数据
C)p是指向int型数据的指针D)p是函数名,该函数返回一指向int型数据的指针
2. 变量的指针,其含义是指该变量的:( )
A) 值B) 地址C) 名D)一个标志
3.若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是( )
A) pb=&x B) pb=x C) *pb=&x D) *pb=*x
4、已知:int a, *p=&a; 则下列函数调用中错误的是()。
A、scanf(“%d”,&a);
B、scanf(“%d”,p);
C、printf(“%d”,a);
D、printf(“%d”,p);
5. 对于同类型的指针变量,不可能进行的运算是()。
A)- B)= C)+ D)==
6. 下列不正确的定义是()。
A)int *p=&i,i; B)int *p,i; C)int i,*p=&i; D)int i,*p;
7. 若有说明:int n=2,*p=&n,*q=p,则以下非法的赋值语句是:
A)p=q B)*p=*q C)n=*q D)p=n
8. int *p,a=10,b=0;
p=&a; a=*p+b;
执行该程序段后,a的值为
A) 编译出错B) 10C) 11 D) 12
9.有语句:int a[10],;则是对指针变量p的正确定义和初始化。
A)int p=*a; B)int *p=a;C)int p=&a; D)int *p=&a;
10. 若有说明语句“int a[5],*p=a;”,则对数组元素的正确引用是( )。
A)a[p] B)p[a] C)*(p+2) D)p+2
11. 若指针变量p指向整型数组a[10]的首地址, 即p=a ; 则下列数组元素a[i]的表示方法中正确的是()
A) p+i B)&( a+i) C) *(a+i)D) *(p+i*2)
12. 有如下程序: int a[10]={1,2,3,4,5,6,7,8,9,10},*P=a;
则数值为9的表达式是
A) *P+9 B) *(P+8) C) *P+=9 D) P+8
13. 若有以下定义,则不能表示a数组元素的表达式是( )。
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
A)*p B)a[10]C)*a D)a[p-a]
14. 已知int a[5],*p=a;下面的叙述中正确的是。
A) p+1与a+1等价B) p[1]与*p等价C) *(p+1)与a+1等价D) p[1]与a++等价
15. 若有以下说明:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为4的表达式是
A) *p+4 B) *(p+4) C) *(p+3)D) p+3
16. 下面程序的输出结果是
main()
{ int a[ ]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;
printf(“%d\n”,*p+1);
}
A) 0 B) 1 C) 2D) 输出错误
18. 执行语句char c[10]={ ”abcd”},*pc=c; 后,*(pc+4)的值是()
A) “abcd” B)?\0?C) …d? D) 不确定
19.下列函数的功能是。
void fun(int *p1,int *p2)
{ int p;
p=*p1;*p1=*p2;*p2=p;
}
A) 交换*p1和*p2的值B) 语法正确,但无法交换*p1和*p2的值
C) 交换*p1和*p2的地址D)有语法错误
20. 有如下程序
main()
{ char s[]=“ABCD”, *P;
for(p=s+1; p
该程序的输出结果是
A) ABCD B) A C) B D) BCD
BCD B C CD
CD C D D
D D
21. 请读程序,输出结果为: ( )
#include
int a[]={2,4,6,8};
main()
{ int i,b[4];
int *p=a;
for(i=0;i<4;i++) {b[i]=*p;p++;}
printf("%d\n",b[2]);
}
A) 6B) 8 C) 4 D) 2
二、阅读程序,写出运行结果
1.
# include
main ( )
{ int x[ ] = {10, 20, 30, 40, 50 }; int *p ;
p=x;
printf ( “%d”, *(p+2 ) );
}
运行结果为:
30
2.
#include
main( )
{ char s[]=”abcdefg”;
char *p;
p=s;
printf(“ch=%c\n”,*(p+5));
}
运行结果为:
ch=f
3.
#include
main ( )
{ int a[]={1, 2, 3, 4, 5} ;
int x, y, *p;
p=a;
x=*(p+2);
printf("%d:%d \n", *p, x);
}
运行结果为:
1:3
4.
#include
main( )
{ int a[ ]={1, 2, 3, 4, 5, 6};
int x, y, *p;
p = &a[0];
x = *(p+2);
y = *(p+4);
printf(“*p=%d, x=%d, y=%d\n”, *p, x, y); }
运行结果为:
*p=1, x=3, y=5
5.
#include
main()
{int a[5]={1,2,3,4,5};
int i,*p;
p=a;
for(i=0;i<5;i++)
printf("*%d",a[i]);
for(i=0;i<5;i++)
printf("#%d",*p++);
}
运行结果为:
*1*2*3*4*5#1#2#3#4#5
6.
#include
main()
{ static int a[ ] ={2,5,7};
int s,k,*p=NULL;
s=1;
p=a;
for (k=0;k<3;k++)
s*=*(p+k);
printf("%d\n",s);
}
运行结果为:
70
7.
#include
main()
{int x=2,y,z;
int *px=&x;
*(px+1)=4;
y=*++px;
z=++*px;
printf("\ny=%dz=%d",y,z); }
运行结果为:
y=4z=3
8.
#include
main()
{char a[]="I am a boy.", b[20]; int i;
for(i=0; *(a+i)!='\0'; i++)
*(b+i)= *(a+i);
*(b+i)='\0';
for(i=0; b[i]!='\0'; i++)
printf("%c",b[i]);
}
运行结果为:
I am a boy.
9.
#include
main()
{ int a[]={1,2,3,4,5,6};
int *p;p=a;
printf("%d ",*p);
printf("%d ",*(++p));
printf("%d ",*++p);
printf("%d ",*(p--));
p+=3;
printf("%d %d ",*p,*(a+3));
}
运行结果为:
2 3 3 5 4
10.
#include
char s[]=”ABCD”;
main()
{ char *p;
for(p=s;p
printf(“%c %s\n”,*p,p);
}
运行结果为:
A ABCD
B BCD
C CD
D D
11.
#include
main( )
{ static char a[ ]=”Program”, *ptr;