指  针
一、单项选择题
1.对于同类型的指针变量,不可能进行的运算是( C )。
  A-      B=        C+    D==
2.下列不正确的定义是( A )。
  Aint *p=&i,i;    Bint *p, i;    Cint i, *p=&i;     Dint t, *p;
3.下列正确的定义是( B )。
  Aint x=3,*p=1;    Bint x=3,*p;    Cint x=3,*p=x;    Dint *p=&x=3;
4. 下列语句定义p为指向float类型变量d的指针,其中哪一个是正确的( B
  A、float d,*p=d;  B、float d,*p=&d;    C、float *p=&d,d; D、float d,p=d;
5. 对语句“int a[10],*p=a;”,下列表述中哪一个是正确的( D )
    A、*p被赋初值为a数组的首地址        B、*p被赋初值为数组元素a[0]的地址
    C、p被赋初值为数组元素a[1]的地址    D、p被赋初值为数组元素a[0]的地址
6.设有定义 int a=1b*p=&a; 则下列语句中使b不为a的语句是( D )
    Ab=*&a;    Bb=*p;    Cb=a;    Db =*a;
7. p1指向某个整型变量,要使指针p2也指向同一变量,哪一个语句是正确的( A )
  A、p2=p1;   B、p2=**p1;      Cp2=&p1;       D、p2=*p1;
8. 假如指针p已经指向变量x,则&*p相当于( C )。
    A、x           B、*p            C&x            D、**p
9. 假如指针p已经指向某个整型变量x,则(*p)++相当于( B )。
A、p++         B、x++           C*(p++)        D、&x++
10.设指针x指向的整型变量值为25,则printf(“%d\n”,++*x);的输出是( D )。
    A23    B24    C25    D26
11.若有说明:int i, j=7,*p=&i; 则与 i=j;等价的语句是( B )。
    Ai=*p;    B*p=*&j;    Ci=&j;    Di=**p;
12. 若有说明:char ch, *p; p不能正确获得值的语句是( A )。
    A*p=getchar( );                          Bp=&ch;  scanf(“%c”, p);
    Cp=(char *)malloc(1); *p=getchar( );      Dp=&ch;  *p=getchar( );
13.若有说明语句int a[ ]={1,2,3,4,5}, *p=a, i;0<=i<5, 则对数组元素错误的引用是( C )。
        A*(a+i)        Ba[p-a]    Cp+1      D*(&a[i])
14.若有说明语句 int a[5], *p=a;  对数组元素的正确引用是( C )。
    A*&a[5]    B*p+2    C*(a+2)    D*a++
15.若有说明语句 int a[5], *p=a; 对数组元素的正确引用是( C )。
  Aa[p]    Bp[a]    C*(p+2)    Dp+2
16.若有以下定义,且0<=i<5, 则对数组元素地址的正确表示是( D )。
    int a[ ]={1,2,3,4,5},*p=a, i;
  A&(a+i)    Ba++    C&p    D&p[i]
17.下面各语句中,能正确进行赋字符串操作的语句是( C )。
    Achar s[5] =”ABCDE”;         Bchar s[5] ={‘A’,B’, C’,D’, E’};
  Cchar *s;  s=”ABCDE”;        Dchar *s;  scanf(“%s”,&s);
18.若有以下定义,则 *(p+5) 的值为( B )。
    char s[ ]=”Hello”, *p=s;
    A’0’    B’\0’     C’0’的地址      D.不确定的值
19.若有以下的定义,则值为3的表达式是( A )。
    int a[10] ={1,2,3,4,5,6,7,8,9,10}, *p=a;
  Ap+=2,*(p++)      Bp+=2,*++p    Cp+=3,*p++    Dp+=2,++*p;
20.执行语句 char a[10] ={“abcd”},*p=a 后,*p+4的值是( C )。
A”abcd”    B’d’    C’\0’    D.不能确定
21. 数组定义为“int a[4][5];”,引用“a+3”表示( C )。
    A、a数组第3列的首地址              B、a数组第0行第3列元素的值
    C、a数组第3行的首地址             D、a数组第0列第3行元素的值
22. 数组定义为“int a[4][5];”,引用“a[1]+3”表示( A )。
    A、a数组第1行第3列元素的地址     B、a数组第1行第3列元素的值
    C、a数组第4行的首地址               D、a数组第4列的首地址
23. 数组定义为“int a[4][5];”,引用“*(*a+1)+2”表示( C  )。
    A、a[1][0]+2              B、a数组第1行第2列元素的地址
  C、a[0][1]+2               D、a数组第1行第2列元素的值
24. 数组定义为“int a[4][5];”,下列哪一个引用是错误的( D )。
    A、*a          B、*(*(a+2)+3)      C、&a[2][3]          D、++a
25.若有定义 int a[3][4]; 则对数组元素a[i][j] (0<=i<3,0<=j<4) 正确的引用是( B )。
    A*(a+4*i+j)    B*(*(a+i)+j)    C*(a+i)[j]    Da[i] +j
26.若有定义 int a[3][4],*p; 则对数组元素a[i][j](0<=i<3,0<=j<4)正确的引用是( C  D )。
    Ap=a    Bp=a, *(*(p+i)+j)  Cp=a[0], *(p+i*4+j)    D*(*(a+i)+j)
27.若有定义int a[3][4], (*p)[3];则对数组元素a[i][j] (0<=i<3,0<=j<4) 正确的引用是( D )。
    Ap=a[i]    Bp=&a[i][j]    Cp=a, *(p+i*4+j)  Dp=a, *(*(p+i)+j)
28.若有定义int a[3][4], *p, *q[3]; 0<=i<3,则错误的赋值语句是( A )。
    Ap=a    Bq[i]=a[i]    Cp=a[i]    Dq[i]=&a[2][0]
29.设有定义语句 int (*ptr)[10]; 其中的ptr是( C )。
    A10个指向整型变量的函数指针
    B.指向10个整型变量的函数指针
  C.一个指向具有10个元素的一维数组的指针
D.具有10个指针元素的一维数组
30.若有以下定义,则数值为4的表达式是( D )。
      int w [3][4] ={{0,1},{2,4},{0,1},{0,1}}, (*p)[4]=w;
A* w [1]+1    Bp++, *(p+1)    Cw [2][2]    Dp[1][1]
31.若有下面的程序片段,则对数组元素的错误引用是( C )。
      int a[12] ={0},  *p[3],  **pp, i;
      for(i=0; i<3; i++)  p[i]=&a[i*4];
      pp=p;
    App[0][1]    Ba[10]    Cp[3][1]     D*(*(p+2)+2)
指针变量本身有地址吗32.若有如下定义和语句,则输出结果是( D )。
      int **pp, *p, a=10, b=20;
      pp=&p; p=&a; p=&b; printf(“%d,%d\n”, *p, **pp);
  A10, 20    B10, 10    C20, 10    D20, 20
33.若有以下定义和语句,则对w数组元素的非法引用是( B )。
    int w [2][3],  (*pw)[3];  pw=w;
  A*(w [0]+2)    B*pw [2]    Cpw [0][0]    D*(pw [1]+2)
二、填充题
1C语言中,数组名是一个 地址  常量,不能对它进行 加减 赋值 运算。
  数组名 代表它的首地址。
2.在C程序中,指针变量只能赋 地址 值和  NULL  值。
3.在C程序中,指针变量可以通过 取地址运算符  相互赋值   赋NULL
  三种方式赋值。
4.在C程序中,可以对指针变量进行 加减整数   ++,----    来移动指针。
5.单目运算符“*”称为   间接访问  运算符,“&”称为     取地址      运算符。
6.若两个指针变量指向同一个数组的不同元素,可以进行减法运算和 比较 运算。
7.设int a[10], *p=a; 则对a[3] 的引用可以是p[ 3 ]*(p +3 )
8.若d是已定义的双精度变量,再定义一个指向d的指针变量p的语句是double *p=&a
9&后跟变量名,表示该变量的 地址 ,
*后跟指针变量名,表示该指针变量 所指的变量值 ,

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。