指针小练

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_20218109/article/details/53377542

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.   编写一个程序,输入一个字符串,并反向输出之。

猜你喜欢

转载自blog.csdn.net/qq_20218109/article/details/53377542