第七章  指针
选择题
1 设有定义:int  n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是______
A*p=*q;          Bp=q;            C*p=&n1;            Dp=*q;
2、若有定义:int  x=0, *p=&x;,则语句printf("%d\n",*p);的输出结果是______
    A)随机值          B0                Cx的地址            Dp的地址
3、有以下程序
main()
{ int a=7,b=8,*p,*q,*r;
        p=&a;q=&b;
        r=p; p=q;q=r;
        printf("%d,%d,%d,%d\n",*p,*q,a,b);
}
程序运行后的输出结果是______
A8,7,8,7            B7,8,7,8        C8,7,7,8            D7,8,8,7
4、若有说明语句:double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是____
A*p=&a;  scanf(“%lf”,p);                B)*p=&a;  scanf(“%f”,p);
C) p=&a;  scanf(“%lf”,*p);                D)p=&a;  scanf(“%lf”,p);
5、若程序中已包含头文件stdio.h,以下选项中,正确运用指针变量的程序段是______
Aint *i=NULL;                        Bfloat *f=NULL;
  scanf("%d",i);                    *f=10.5;
Cchar t='m',*c=&t;                    Dlong *L;
    *c=&t;                          L='\0';
6、若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是___ ___
A字符串长度为0pb=&x;            Bpb=x;        C*pb=&x;            D*pb=*x
7、若定义:int a=511,*b=&a;, printf("%d\n",*b);的输出结果为     
A) 无确定值            B) a的地址        C) 512                D) 511
8、若有说明:int ij=7 *p=&i;,则与i=j;等价的语句是________   
A) I= *P;                B) *P=*&J;        C) i=&j;                D) i=* *p;
9、若有说明:int i,j=7,*p=&i;则与i=j;等价的语句是__ ____
Ai=*p;                B*p=*&j;        Ci=&j;                Di=**p;
10、若有一些定义和语句
  #include <stdio.h>
  int  a=4,b=3,*p,*q,*w;
  p=&a;q=&b;w=q;q=NULL;
则以下选项中错误的语句是______
A*q=0;            Bw=p;            C*p=va;            D*p=*w;
11、有以下程序
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);
    }
程序运行后的输出结果是______
AB,a,B,a        Ba,B,a,B        CA,b,A,b          Db,B,A,b
12、有以下程序
int a=2;
int f(int *A)
{return (*A) ++;}
main( )
{  int s=0;
    { int a=5;
      s+=f(&a) ;
    }
    s+=f(&a) ;
    printf(“%d\n”,s);
}
执行后输出结果是_____
A) 10                B) 9                    C) 7                    D) 8
13、下列程序段的输出结果是_____
A) 2 14 3                B) 1 21 2                C) 1 23 4                D) 2 11 2
void fun(int  *x, int  *y)
{  printf(“%d  %d”, *x, *y); *x=3; *y=4;}
main()
{  int  x=1,y=2;
  fun(&y,&x);
  printf(“%d %d”,x, y);
}
14、下列程序的运行结果是_____
A) 6  3                B) 3  6                C) 编译出错            D) 0  0
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);
}
15、若定义了以下函数:
void f(……)
{……
  *p=(double *)malloc( 10*sizeof( double));
……
}
p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是______
A) double  *p        B) float  **p            C) double  **p        D) float  *p
16、设有以下语句,则    不是对a数组元素的正确引用,其中0i<10
int a[10]={0,1,2,3,4,5,6,7,8,9}, *p=a;
A) a[p-a]                B) *(&a[i])            C) p[i]            D) *(*(a+i))
17、若有以下定义和语句:   
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则不能表示a数组元素的表达式是____
A) *p                B) a[10]                C) *a            D) a[p-a]
18、有以下程序段
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;
b=p[5];
b中的值是____
A) 5                    B) 6                    C) 8                D) 9
19、当调用函数时,实参是一个数组名,则向函数传送的是____
A) 数组的长度                            B) 数组的首地址
C) 数组每一个元素的地址                    D) 数组每个元素中的值
20、若有定义:int  aa[ 8];。则以下表达式中不能代表数组元aa[1]的地址的是_____
A) &aa[0]+1            B) &aa[1]            C) &aa[0]++        D) aa+1
21、阅读以下函数
fun(char  *sl,char  *s2)
{ int  i=0;
      while(sl[i]==s2[i]&&s2[i]!='\0') i++;
      return(sl[i]=='\0'&&s2[i]=='\0');
}
此函数的功能是_______
A)将s2所指字符串赋给s1
B)比较s1s2所指字符串的大小,若s1s2的大,函数值为1,否则函数值为0
C)比较s1s2所指字符串是否相等,若相等,函数值为1,否则函数值为0
D)比较s1s2所指字符串的长度,若s1s2的长,函数值为1,否则函数值为0
22、以下选项中,不能正确赋值的是___ ___
Achar s1[10];s1="chest";
Bchar s2[]={'C','t','e','s','t'};
Cchar s3[20]="Chest";
Dchar *s4="Chest\n";
23、有以下程序
main( )
{ char a[]=”abcdefg”,b[10]=”abcdefg”;
printf(“%d  %d\n”,sizeof(A) ,sizeof(B) );
}
执行后输出结果是______
A) 7  7          B) 8  8            C) 8  10        D) 10  10
24、以下程序段的输出结果是:______
    char s[]="\\141\141abc\t";
    printf("%d\n",strlen(s));
A9            B12            C13            D14
25、以下不能正确进行字符串赋初值的语句为______
Achar  str[5]="good!"                Bchar  str[]="good!"
Cchar  *str="good!"                    Dchar  str[5]={'g','o','o','d'}
26、若有以下定义:int t[3][2]; 能正确表示t数组元素地址的表达式是______
A&t[3][2]        Bt[3]        Ct[1]          D*t[2]
27、有以下程序
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]);
}
程序运行后的输出结果是______
A3            B6            C9            D2
28、下面程序的输出是______       
A) 23            B) 26          C) 33            D) 36
int aa[3][3]={{2},{4},{6}};
main()
{ int i, * p=&aa[0][0];
for(i=0; i<2;i++)
{ if(i==0)
aa[i][i+1]=*p+1;
else
++p;
printf("%d",*p);}
}
29、有以下程序
int f(int b[][4])
{ int i,j,s=0;
        for(j=0;j<4;j++)
        { i=j;
          if(i>2) i=3-j;
          s+=b[i][j];
        }
        return s;
}
main()
{ int a[4][4]={{1,2,3,4},{0,2,4,6},{3,6,9,12},{3,2,1,0}};
        printf("%d\n",f(a));
}_______
A12              B11              C18              D16
30、执行以下程序段后,m的值为_____
    int a[2][3]={ {1,2,3},{4,5,6} };

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