第七部分  指针
7.1 选择题
1. 若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是()。
A. p=q;          B. *p=*q;        C. a=*q;        D. q=a;
2. 若定义:int a=511, *b=&a;,则printf("%d\n", *b);的输出结果为:
  A. 无确定值      B. a的地址      C. 512          D. 511
3. 已有定义 int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是()。
A. a=*p1+*p2;    B. p1=a;          C. p1=p2;        D. a=*p1*(*p2);
4. 变量的指针,其含义是指该变量的()。
A. 值            B. 地址          C. 名            D. 一个标志
5. 若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是()。
A. scanf("%d%d%d", &a, &b, d);
B. scanf("%d%d%d", a, b, d);
C. scanf("%d%d%d", &a, &b, &d);     
D. scanf("%d%d%d", a, b,*d);
6. 若已定义int a=5; 下面对(1)、(2)两个语句的正确解释是()。
(1) int *p=&a;                  (2) *p=a;
A. 语句(1)和(2)中的*p含义相同,都表示给指针变量p赋值。
B. (1)和(2)语句的执行结果,都是把变量a的地址值赋给指针变量p。
C. (1)在对p进行说明的同时进行初始化,使p指向a;
(2)变量a的值赋给指针变量p。
D. (1)在对p进行说明的同时进行初始化,使p指向a;
  (2)将变量a的值赋予*p。
7. 若有语句int *p, a=10; p=&a; 下面均代表地址的一组选项是()。
A. a, p, *&a                            B. &*a, &a, *p
C. *&p, *p, &a                          D. &a, &*p, p
8. 若需要建立如图所示的存储结构,且已有说明double *p, x=0.2345; 则正确的赋值语句是()。
               
A. p=x;                                  B. p=&x; 
C. *p=x;                                D. *p=&x;
9. 若有说明:int *p, a=1, b; 以下正确的程序段是()。
A. p=&b;                                B. scanf("%d", &b);
scanf("%d", &p);                            *p=b;
C. p=&b;                                D. p=&b;
scanf("%d", *p);                            *p=a;
10.有如下语句:int m=6, n=9, *p, *q; p=&m; q=&n; 如图1所示,若要实现下图所示的存储结构,可选用的赋值语句是()。
       
    A. *p=*q;                                B. p=*q;
    C. p=q;                                  D. *p=q;
11.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是()。
    #include <stdio.h>
    main()
{
int *p, *q, a, b;
p=&a;
printf("input a:");
scanf("%d", *p);
…   
}
A. *p表示的是指针变量p的地址
B. *p表示的是变量a的值,而不是变量a的地址
C. *p表示的是指针变量p的值
D. *p只能用来说明p是一个指针变量
12.下面程序的功能是从输入的十个字符串中出最长的那个串。请在________处填空。
    #include "stdio.h"
    #include "string.h"
    #define N 10
    main()
{
char s[N][81], * t;
int j;
  for (j=0; j<N; j++)
gets (s[j]);
t= *s;
  for (j=1; j<N; j++)
if (strlen(t)<strlen(s[j]))  ________;
  printf("the max length of ten strings is: %d, %s\n", strlen(t), t);
}
A. t=s[j]      B. t=&s[j]        C. t= s++          D. t=s[j][0]
13.下面判断正确的是()。
A. char *s="girl";                等价于  char *s; *s="girl";
B. char s[10]={"girl"};            等价于  char s[10]; s[10]={"girl"};
C. char *s="girl";                等价于  char *s; s="girl";
D. char s[4]= "boy", t[4]= "boy";  等价于 char s[4]=t[4]= "boy"
14.设char *s="\ta\017bc";则指针变量s指向的字符串所占的字节数是()。
A. 9                  B. 5            C.  6            D. 7
15.下面程序段中,for循环的执行次数是()。
    char *s="\ta\018bc";
    for (;*s!='\0';s++) printf("*");
A. 9                  B. 5            C.  6            D. 7
16.以下不能正确进行字符串赋初值的语句是()。
A.char str[5]= "good!";       
B. char *str="good!";
C.char str[]="good!"
    D. char str[5]={'g', 'o','o', 'd'};
17.若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是()。
A. p=2*(int *)malloc(sizeof(int));
B. p=(int *)malloc(2*sizeof(int));
C. p=(int *)malloc(2*2);
D. p=(int*)calloc(2, sizeof(int));
18.下面程序段的运行结果是()。
  char *s="abcde";
    s+=2;
    printf("%d", s);
A. cde      B. 字符'c'    C. 字符'c'的地址    D. 无确定的输出结果
19.设有如下的程序段:char s[]="girl", *t;  t=s;则下列叙述正确的是()。
A. s和t完全相同
B. 数组s中的内容和指针变量t中的内容相等
C. s数组长度和t所指向的字符串长度相等
D. *t与s[0]相等
20.以下正确的程序段是()。
A. char s[20];                              B. char *s;
  scanf("%s", &s);                            scanf("%s", s);
C. char s[20];                              D. char s[20], *t=s;
    scanf("%s", &s[2]);                          scanf("%s", t[2]);
21.下面程序段的运行结果是()。
#include "stdio.h"
main()
{
int m=10, n=20;
  char *format="%s, m=%d, n=%d\n";
  m*=n;
  printf(format, "m*=n", m,n);
}
A. format, "m*=n", m, n                      B. format, "m*=n"
C. m*=n, m=200, n=20                        D. 以上结果都不对
22.以下与库函数strcpy(char *p, char *q)功能不相等的程序段是()。
A. strcpy1(char *p, char *q)
{ while ((*p++=*q++)!='\0');
}
B. strcpy2( char *p, char *q)
{  while((*p=*q)!='\0')
        {p++;      q++;}
}
C. strcpy3(char *p, char *q)
{  while (*p++=*q++);
sizeof 指针
}
  D. strcpy4( char *p, char *q)
      {  while(*p)
            *p++=*q++;

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