1. 对于基类型相同的两个指针变量之间,不能进行的运算是:____
A .< B.= C. + D.-
2. 若有定义int *p1,*p2,m=5,n; 以下均为正确赋值语句的的选项是______
A.p1=&m;p2=&p1; B.p1=&m;p2=&n;*p1=*p2;
C.p1=&m;*p1=*p2; D.p1=&m;*p2=*p1;
3.int a=12,a的地址为2000,如果想让指针p为指向a的指针变量,则正确的赋值是———。
A.&a=3 ; B.*p=12; C.*P=2000; D.p=&a;
4.如果有以下定义和语句:
inta=4,b=3,*p,*q,*w;
p=&a;q=&b;w=q;q=NULL;
则以下选项中错误的语句是____
A.*q=0; B.w=p; C.*P=a; D.*p=*w;
5.以下程序有错,错误的原因是什么?
#include<stdio.h>
void main()
{
int *p,i;
char *q,ch;
p=&i;
q=&ch;
*p=40;
*p=*q;
}
6.若有定义int a[]={1,3,5,7,9,11},*ptr=a;则能够正确地引用该数组元素的是_____
A.a B.*(ptr--) C.a[6] D.*(--ptr)
7.若有定义语句:
Int i,a[2][3]={1,3,5,7,9,11};
Int m,n;
且0<=m<=1,0<=n<=2,则_______是对数组元素的正确引用
A.a[m]+n B.*(a+5) C.*(*(a+m)+3) D*(*(a+m)+n)
8.以下程序的执行结果为:___________
#include<stdio.h>
Void main()
{
int *p1,*p2,*p;
int a=10,b=12;
p1=&a;p2=&b;
if(a<b)
{
p=p1;p1=p2;
p2=p;
}
printf(“%d,%d,”*p1,*p2);
printf(“%d,%d\n”,a,b);
}
9.以下程序的输出结果是_____.
#include<stdio.h>
Void main()
{
Int a[5] = {1,2,3,4,5};
Int *ptr = (int *)(&a+1);
Printf(“%d,%d\n”,*(a+1),*(ptr-1));
}
10.以下程序的输出的结果是______
#include<stdio.h>
Void main()
{
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]);
}
11.以下程序的结果是_______
#include<stdio.h>
Void main()
{
Int x[8]={8,7,6,5,0,0},*s;
s=x+3;
printf(“%d\n”,s[2]);
}
12.以下程序的结果是______
#include<stdio.h>
Void main()
{
Int k=3,j=4;
int *p=&k,*q=&j;
(*p)--;
j=k;
(*q)--;
printf(“(%d,%d)”,k,j);
}
13.以下程序结果是_____.
#include<stdio.h>
Void main()
{
int c[] = {1,7,12};
int *p=c+1;
printf(“%d”,*p++);
}
14.以下程序对吗?对的话结果为多少?
#include<stdio.h>
{
int **k,*j,i++;
j = &i;
k=&j;
printf(“%d\n”,**k);
}
15.以下程序的结果是:
#include<stdio.h>
Void main()
{
Char str[2][5]={“6937”,”8254”},*p[2];
int i,j,s=0;
for(i=0;i<2;i++)
{
P[i]=str[i];
}
For(i=0;i<2;i++)
{
For(j=0;p[i][j]>’\0’;j+=2)
{
s=10*s+p[i][j]-‘0’;
}
}
Printf(“%d\n”,s);
}
16.已知inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int(*ptr)[3]=a,*p=a[0];则可以怎么用指针形式表示数组元素a[1][2]。__________
二.判断题
1.inta=5,*p;*p=&a;则p的值为5.
2.指针变量可以初始化为NULL或一个地址.
3.int *p;中的*p的含义为取值.
4.若有定义int a[4][10],*p,*q[4];且0<i<4,则 p=a 是错误的赋值
5.假设有int a[10],*p;则p=&a[0]与p=a等价
6.char *p = “gril”;的含义是定义字符型指针变量p,p的值是字符串“gril”.
7.若p是一个指针变量,表达式*p++的运算顺序为先自增后取值。
8. 若p是一个指针变量,执行语句*--p之后,p指向的内存单元值被改变。
9. 若p是一个指针变量,执行语句(*p)++之后,p指向的内存单元值被改变。
10. 若p是一个指针变量,执行表达式(*p)++之后p的指向改变了。
11.对于二维数组a,*(a[i]+j)与a[i][j]的含义相同。
12.有定义int a[10] = {1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是*(p+8)。
13.int (*p)[4]表示p是一个指针数组,它包含4个指针变量元素。
14.charstr[20];str = “GOOD morning”;
15.char *p;p=”GOOD morning”;
三:编程题
1. 编写一个程序,输入一个字符串,并反向输出之。