更多“设有以下程序段:int a[5]={0},*p,*q;p=a;q=a;则下列选项中,合法的运算是.A.p+qB.p-qC.p*qD.P%q ”相关问题
  • 第1题:

    设有以下程序段:

    int a[5]={0},*p,*q;

    p=a;

    q=a;

    则下列选项目,合法的运算是

    A.p+q;

    B.p-q

    C.p*q

    D.p%q


    正确答案:B
    解析:本题考核指针的运算。C++语言中,指向同一字符串的指针之间可以,也只能进行减运算,减运算后返回的是一整型数,表示指针之间的地址偏移量。

  • 第2题:

    以下对指针变量的操作中,不正确的是()。

    A.int p, *q; q=&p;

    B.int *p, *q; q=p=NULL;

    C.int a=5, *p; *p=a;

    D.int a=5, *p=&a, *q=&a; *p=*q;"


    参考答案C

  • 第3题:

    设有定义:int n=0,*p=&n,**q=&p;,则以下选项中,正确的赋值语句是 ______。

    A.p=1;

    B.*q=2

    C.q=p

    D.*p=5


    正确答案:D
    解析:本题中n是int型变量,p是指向int型的指针变量,q是指向指针的指针变量,故正确答案为D。

  • 第4题:

    若有以下定义和语句:includeinta=4,b=3,*p,*q,*w;p=&a; q=&b; w=q; q=NULL;则

    若有以下定义和语句: #include<stdio.h> int a=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;


    正确答案:A
    解析:本题中定义了3个指向整型的指针变量p、q、w,并让p指向a,让q指向b,通过将q的值赋给w,使w也指向b,最后将q指向NULL。因为q指向NULL,所以选项A中对q所指地址进行写入是非法的。故A选项为所选。

  • 第5题:

    若有如下程序段: include using namespace std; int main() {char*p="abcdefgh",*r;l

    若有如下程序段:

    include <iostream>

    using namespace std;

    int main()

    {

    char *p="abcdefgh",*r;

    long *q;

    q=(long *)p;q++;

    r=(char *)q;

    cout<<r<<end1;

    return 0;

    }

    该程序的输出结果是______。


    正确答案:efgh
    efgh 解析:本题定义了一个字符型指针变量p,并通过赋初值让它指向了一个字符串,还定义了另一个字符型指针变量r和一个长整型指针变量q。首先通过语句“a=(long*)p;”,把p的地址值强制转换为长整型地址值并赋值给小然后执行“q++”,地址值增加了4,执行语句“r=(char*)q;”,把长整型指针变量q的值再强制转换成字符型地址值并赋给r,r的值应为字符串中字符“e”的地址。最后输出r指向的字符串。

  • 第6题:

    有下列程序: #include<stdi0.h> voidfun(int*a,int*b) {int*C; c=a;a=b;b=C; } voidmain( ) {intx=3,y=5,*p=&x,*q=&y; fun(p,q);printf("%d,%d,",*P,*q); fun(&x,&y);printf("%d,%d\n",*P,*q) } 程序运行后的输出结果是( )。

    A.3,5,5,3

    B.3,5,3,5

    C.5,3,3,5

    D.5,3,5,3


    正确答案:B
    B。【解析】本题子函数fun(int*a,*b)的功能是交换形参a,b的值。主函数中调用子函数fun(P,q)和fun(&x,&y)后,实参P,q和&x,&y的值之间并没有发生交换,所以程序输出的结果为3,5,3,5。

  • 第7题:

    若有以下定义则不能将指针q所指的结点接到链表末尾的程序段是()。

    A.q->next=NULL;p=p->next;p->next=q

    B.p=p->next;q->next=p->next;p->next=q

    C.p=p->next;q->next=p;p->next=q

    D.p=(*p).next;(*q).next=(*p).next;(*p).next=q


    参考答案:C

  • 第8题:

    设有以下程序段:int a[5]={0),*p,*q;p=a;q=a;则下列选项中,合法的运算是( )。

    A.p+q

    B.p-q

    C.p*q

    D.p%q


    正确答案:B

  • 第9题:

    若有一些定义和语句include inta=4, b=3, *p,*q,*w;p=&a;q=&b;w=q;q=NULL;则

    若有一些定义和语句 #include <stdio.h> int a=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;


    正确答案:A
    解析:本题考核的知识点是指针变量的使用与空指针(NULL)基本概念.本题中定义了3个指向整型的指针变量p、q、w,并让p指向a,让q指向b,通过将q的值赋给w,使w也指向b,最后将NULL赋值给q。由整形变量指针的定义可知,可以给整型指针指向的变量赋一个常数值(表达式),故选项C和选项D是正确的;可以给指针变量赋一个同种类型的指针变量(或地址值),故选项B也是正确的;选项A错误,因为q不指向任何变量,给一个空指针指向的单元赋值是错误的。所以,A选项为所选。

  • 第10题:

    设有以下程序段; int a[5]={0},*p,*q; p=a;q=a;则合法的运算是______。

    A.p+q

    B.p-q

    C.p*q

    D.p%q


    正确答案:B
    解析:指向同一字符串的指针可以、也只能进行减运算,返回一个整型数。

  • 第11题:

    以下对指针变量进行操作的语句,正确的选项是()

    • A、int*p,*q;q=p;
    • B、inta,*p,*q;q=&a;p=*q;
    • C、inta=b=0,*p;p=&a;b=*p;
    • D、inta=20,*p,*q=&a;p=q;

    正确答案:D

  • 第12题:

    填空题
    以下程序段的输出结果是()。      int a=l,b=2,*p=&a,*q=&b;         p=q;*p=3;    printf(“%d”,b);

    正确答案: 3
    解析: 暂无解析

  • 第13题:

    以下程序运行后的输出结果【 】。

    struct NODE

    {int k;

    struct NODE *link;

    };

    main()

    {structNODEm[5],*p=m,*q=m+4;

    int i=0;

    while(p!=q){

    p->k=++i;p++;

    q->k=i++;q-;

    }

    q->k=i;

    for(i=0;i<5;i++)printf("%d",m[i].k);

    printf("\n");

    }


    正确答案:13431
    13431 解析:程序执行过程如下:
    p=m,q=m+4,条件9!=q成立,执行p->k=++i;,由于是“前加”,所以m[0].k=1,执行p++后p=m+1;执行q->k=i++;,由于是“后加”,所以m[4].k=1,然后使得i加上1,即i=2,q-后,q=m+3: p=m+1,q=m+3,条件p!=q成立,执行p->k=++i;,由于是“前加”,所以i=3,m[0].k=3,执行p++后p=m+2:执行 p->k=++i;,由于是“后加”,所以m[4].k=3,i=4,q-后,q=m+2; p=m+2,q=m+2,条件p!=q不成立,则执行p->k=i;即m[2].k-4;故输出的值为13431。

  • 第14题:

    设程序如下:includeusing namespace std;int main(){int **p,*q,r=10;q=&r;p=&am

    设程序如下: #include<iostream> using namespace std; int main() { int **p,*q,r=10; q=&r; p=&q; cout<<**p+1<<end1; return 0; } 以上程序的输出结果是( )

    A. p的地址

    B. r的地址

    C.11

    D.运行错误


    正确答案:C
    解析:p为一个二级指针,其存放的是指针变量q的地址,而q存放的又是r的地址。故式子++p相当于对r的引用。所以最后输出的结果为11。

  • 第15题:

    有如下程序段#include "stdio.h"#include "string.h"#define N 10#define M 10char *find(char(*a)[M],int n){ char *q;int i; q=a[0]; for(i=0;i<n;i++) if(strcmp(a[i],q)<0)q=a[i]; return q;}main(){ char s[N][M]={"tomeetme","you","and","he","china"}; char *p; int n=5; p=find(s,n); puts(p);}则执行后输出的结果为A.he B.and C.you D.tomeetme


    正确答案:B
    在本题中,首先定义了两个宏N和M,大小都为10,然后定义了一个返回指针的函数find,该函数带有两个形参,第一个为字符型的指针数组,第二个为整型变量,在函数体中,首先定义了一个指针变量q,并将形参中指针数组的第一个元素赋值给q,然后执行for循环,在循环体中,首先执行条件判断语句,其条件为strcmp(a[i],q)<0(strcmp函数的作用是比较两字符串的大小,如果相等,则返回0值,如果参数中的第一个字符串大,则返回正值,否则返回负值),如果结果为真,说明指针数组当前元素所指向的字符串比q所指向的字符串小,此时,程序执行将当前指针数组元素赋值给p,最后返回p,通过上面的分析我们可以看出,find函数的作用是找出指针数组中各元素所指向字符串的最小字符串。
    在主函数中,定义了一个二维数组s,并赋了初值,然后定义一个指针变量p,用来存放函数find的返回值。调用函数find的参数分别为s和5,结合形参看find函数,不难知道调用find函数就是找出二维数组s中各字符串中最小的字符串,那么应该为and。此时,指针变量p指向字符串“and”的首地址,然后执行puts(p),完成该字符串的输出。因此,本题正确的答案是B。

  • 第16题:

    若有以下定义和语句includeint a=4,b=3,*p,*q,*w;p=&a;q=&b;w=q;q=NULL;则以

    若有以下定义和语句 #include<stdio.h> int a=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;


    正确答案:A
    解析:本题中定义了3个指向整型的指针变量p、q、w,并让P指向a,让q指向b,通过将q的值赋给w,使w也指向b,最后将NULL赋值给q。由整型变量指针的定义可知,可以给整型指针指向的变量赋一个常数值(表达式);可以给指针变量赋一个同种类型的指针变量(或地址值);选项A因为q不指向任何变量,给一个空指针指向的单元赋值是错误的。

  • 第17题:

    设有以下程序段: int a[5]={0},*p,*q; p=a; q=a; 则下列选项中,合法的运算是

    A.p*q

    B.p-q

    C.p*q

    D.p%q


    正确答案:B
    解析:本题考核指针的运算。 C++语言中,指向同一字符串的指针之间可以,也只能进行减运算,减运算后返回的是一整型数,表示指针之间的地址偏移量。

  • 第18题:

    若有以下定义和语句 int a=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;


    正确答案:D
    解析:考生遇到这么复杂的变量间关系时,可以在草稿纸上画出各个变量的内存存放示意图,然后用箭头指向表示指针变量与其他变量之间的关系。如果能够清晰的画出这些变量间关系,则可以会让你容易的判断出正确答案为D。

  • 第19题:

    若有以下定义和语句 int a=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;


    正确答案:D
    解析:指针是一个既强大又危险的技术,C/C++语言之所以灵括高效,原因之一就是采用了指针技术,所以c/C++特别适合开发系统软件和工具软件.在C#语言中已经取消了指针,而且全部属于托管代码。而在dotnet框架中,为了保持兼容性,仍然可以使用C++,但分托管和非托管代码。本题实际上有个圈套,只要注意到题干中“语句”,而且注意到各个选项中都有分号结尾,就可以判断选项D是正确的:语句不是以逗号结尾的。

  • 第20题:

    若有以下程序: void g(int **q) { (**q) ++; (*q) ++; } void main() { int line [5]; int *p=line; for (i=0; i<5; i++) { *p=i; g(&P); } for (i=0; i<5; i++) cout<<line[i]; cout<<end1; } 该程序运行后的输出结果为( )。

    A.12345

    B.1234

    C.11111

    D.55555


    正确答案:A
    解析:本题考核指针的运用。主函数的for循环中向函数g()传入实参&p,则在函数g()中执行“(**q)++;”相当于执行“(**(&p))++”,即(*p)++,其结果就是对相应的数组元素值加1。函数g()中执行“(*q)++;”相当于执行“(*(&p))++”,即p++。其结果为指针p指向下一个数组元素。这样通过for循环给数组元素分别赋值1、2、3、4、5。

  • 第21题:

    下列哪个式子不能表达“p是q的倍数”?()

    A.p Mod q=0

    B.p/q=p\q

    C.Int(p/q)=p/q

    D.Int(p/q)=Mod(p/q)


    本题答案:D

  • 第22题:

    以下程序段的输出结果是()。      int a=l,b=2,*p=&a,*q=&b;         p=q;*p=3;    printf(“%d”,b);


    正确答案:3

  • 第23题:

    下列哪个式子不能表达“p是q的倍数”?()

    • A、p Mod q=0
    • B、p/q=p/q
    • C、Int(p/q)=p/q
    • D、Int(p/q)=Mod(p/q)

    正确答案:D

  • 第24题:

    单选题
    有以下程序#include void fun(int *p,int *q){ int t; t = *p; *p = *q; *q = t; *q = *p;}main(){ int a = 0,b = 9; fun(&a,&b); printf(%d %d,a,b);}程序的输出结果是(  )。
    A

    0 9

    B

    0 0

    C

    9 0

    D

    9 9


    正确答案: A
    解析:
    main函数中变量a和b以传地址的方式传递参数,形参的改变会导致实参的改变。fun函数的作用是先交换两个指针的指向的值,即p指针指向的值是9,q指针指向的值是0,然后将p指针指向的值赋给q指针,q指针指向的值也成了9,所以a和b的值均为9,答案选择D选项。