有四组对指针变量进行操作的语句,以下判断正确的选项是() (1) int *p,*q; q=p; int a,*p,*q; p=q=&a; (2) int a,*p,*q; q=&a; p=*q; int a=20,*p; *p=a; (3) int a=b=0,*p; p=&a; b=*p; int a=20,*p,*q=&a; *p=*q; (4) int a=20,*p,*q=&a; p=q; int p,*q; q=&p;A.正确:(1) 不正确:(2)(3)(4)B.正确:(1)(4) 不正确:

题目

有四组对指针变量进行操作的语句,以下判断正确的选项是() (1) int *p,*q; q=p; int a,*p,*q; p=q=&a; (2) int a,*p,*q; q=&a; p=*q; int a=20,*p; *p=a; (3) int a=b=0,*p; p=&a; b=*p; int a=20,*p,*q=&a; *p=*q; (4) int a=20,*p,*q=&a; p=q; int p,*q; q=&p;

A.正确:(1) 不正确:(2)(3)(4)

B.正确:(1)(4) 不正确:(2)(3)

C.正确:(3) 不正确:(1)(2)(4)

D.以上结论都不正确


相似考题
更多“有四组对指针变量进行操作的语句,以下判断正确的选项是() (1) int *p,*q; q=p; int a,*p,*q; p=q=&a; (2) int a,*p,*q; q=&a; p=*q; int a=20,*p; *p=a; (3) int a=b=0,*p; p=&a; b=*p; int a=20,*p,*q=&a; *p=*q; (4) int a=20,*p,*q=&a; p=q; int p,*q; q=&p;”相关问题
  • 第1题:

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

    A.p=1;

    B.*q=2;

    C.q=p;

    D.*p=5;


    正确答案:D

  • 第2题:

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

    若有一些定义和语句 #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=va;

    D.*p=*w;


    正确答案:A
    解析:给一指针赋空值的正确语句是q=NULL;或q='\0';或q=0;。选项B)的含义为使指针p指向指针q所指向的存储单元。选项C)的含义为使指针P指向变量a所在的存储单元。选项D)的含义为把指针a赋给指针p。

  • 第3题:

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

    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

  • 第4题:

    设有定义: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。

  • 第5题:

    有以下程序includevoid f(int *p,int *q);main(){ int m=1,n=2,*r=&m;f(r, &n

    有以下程序 #include<stdio.h> void f(int *p,int *q); main() { int m=1,n=2,*r=&m; f(r, &n); printf("%d,%d",m,n); } void f(int*p,int*q) {p=p+1; *q=*q+1;) 程序运行后的输出结果是______。

    A.1,3

    B.2,3

    C.1,4

    D.1,2


    正确答案:A
    解析:本题主要考查函数实参和形参之间的传递,C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只能由实参传绐形参,而不能由形参传回来给实参。f(r&n)把n的地址传递给q,通过地址传递的函数可以有返回值,因此,n的值为q的返回值3,又因为p是形参变量没有返回值,所以m的值没有改变,因此,选项A是正确的。

  • 第6题:

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

    A.p*q

    B.p-q

    C.p*q

    D.p%q


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

  • 第7题:

    下面程序的运行结果是void swap(int *a,int *b){ int *t; t=a;a=b;b=t;}main(){ int x=3,y=5,*p=&x,*q=&y; swap(p,q); printf("%d%d\n",*p,*q);}


    正确答案:35
    观察本题的程序可以看出,被调函数swap()实现的功能是交换变量的值,但由于函数不返回任何值,所以在main()函数中打印出的变量的值并没有发生交换,即仍为3和5。

  • 第8题:

    若有以下定义和语句 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是正确的:语句不是以逗号结尾的。

  • 第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题:

    下列哪个式子不能表达“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

  • 第12题:

    单选题
    有以下程序#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选项。

  • 第13题:

    若有定义语句:"int a[4][10],*P,*q[4];"且0≤i<4,则错误的赋值是( )。A.D=aB.q[i]=a[i]C.p=a[l]D.

    若有定义语句:"int a[4][10],*P,*q[4];"且0≤i<4,则错误的赋值是( )。

    A.D=a

    B.q[i]=a[i]

    C.p=a[l]

    D.P=&a[2][1]


    正确答案:A
    数组名是一个存放一个数组首地址的值,是一个地址常量。而p=a不是合法的,因为p和a的基本类型不同。

  • 第14题:

    设有以下程序段:

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

    p=a;

    q=a;

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

    A.p+q;

    B.p-q

    C.p*q

    D.p%q


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

  • 第15题:

    设程序如下: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。

  • 第16题:

    若有以下定义和语句: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选项为所选。

  • 第17题:

    有以下程序include<stdio.h>int*f(int*p,int*q);main( ){int m=1,n=2,*r=&m;r=f(r,&am

    有以下程序

    include<stdio.h>

    int*f(int*p,int*q);

    main( )

    {int m=1,n=2,*r=&m;

    r=f(r,&n);printf(”%d\n”,*r);

    }

    int-f(int*P,int*q)

    (return(*p>*q)?p:q;)

    程序运行后的输出结果是______。


    正确答案:2
    2 解析:函数f的返回值的类型是int*,作用是返回两个int*型指针所指变量中值大的那个指针的。本题中定义了一个int*型指针r并置初值&m,即指针r指向m。r=f(r,&n),由于m的值小于n值,所以f函数返回值为&n,所以输出为2,即n值。

  • 第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题:

    以下程序的输出结果是include "stdio.h"int *f(int *x,int *y){ if(*x<*y) return x; else return y;}main(){ int a=7,b=8, *p,*q,*r ; p=&a; q=&b; r= f(p,q); printf("%d,%d,%d\n",*p,*q,*r);}


    正确答案:7,8,7。
    在本题中,程序首先定义了一个函数f,其结构是int *f(int *x,int *y),这个结构说明函数f的返回类型是指针型,函数f的两个变量分别是指针变量x和y,从程序中我们很容易看出,这个函数的作用是返回形参中值较小的指针值(即地址值),返回的是指针型的结果。
    在主函数中,首先定义了两个整型变量,分别赋初值7和8,并定义了三个指针型变量,接着将指针变量p和q分别指向变量a和b,然后调用函数f,参数分别为指针变量p和q,很显然,p所指向的值小于q所指向的值,那么返回指针变量p的地址值给指针变量r,由于指针变量P的地址值是变量a存储单元的地址值,也就是说,指针变量r指向变量a,因此,最后程序的输出结果是7,8,7。

  • 第20题:

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

    A.p+q

    B.p-q

    C.p*q

    D.p%q


    正确答案:B

  • 第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题:

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

    • 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

  • 第23题:

    单选题
    以下选项中,不能对主函数中变量i和j的值进行交换的程序是(  )。
    A



    #include <stdio.h>
    void swap(int *p, int *q)
    {
     int *t;
     *t = *p;
     *p = *q;
     *q = *t;
    }
    main()
    {
     int i=10, j=20,*a=&i,*b=&j;
     swap(a,b);
     printf(i=%d j=%d,i,j);
    }

    B



    #include <stdio.h>
    void swap(int *p, int *q)
    {
     int t;
     t = *p;
     *p = *q;
     *q = t;
    }
    main()
    {
     int i=10,j=20,*a=&i,*b=&j;
     swap(a,b);
     printf(i=%d j=%d,i,j);
    }

    C



    #include <stdio.h>
    #include <stdlib.h>
    void swap(int *p, int *q)
    {
     int *t;
     t = (int *)malloc(sizeof(int));
     *t = *p;
     *p = *q;
     *q = *t;
     free(t);
    }
    main()
    {
     int i=10,j=20;
     swap(&i,&j);
     printf(i=%d j=%d,i,j);
    }

    D



    #include <stdio.h>
    void swap( int *p, int *q)
    {
     int t;
     t = *p;
     *p = *q;
     *q = t;
    }
    main()
    {
     int i=10,j=20,*x=&i,*y=&j;
     swap(x,y);
     printf(i=%d j=%d,i,j);
    }


    正确答案: A
    解析:
    A项,定义了一个临时指针t,实现两个指针地址的交换,而传入的参数是两个变量i和j的地址,但是函数内部交换的是地址值,并没有交换主函数中变量i与j的值;B项,调用函数传入的是i与j地址,函数体内交换的是地址内元素,临时变量t为整型变量,能实现i与j值交换;C项,调用函数传入的是i与j地址,函数体内交换的是地址内元素,临时变量t为整型指针,且已正确开辟内存,能实现i与j值交换;D项与B项相同,能实现i与j值交换。答案选择A选项。

  • 第24题:

    单选题
    有以下程序:#include void f(int*p,int*q);main(){ int m=1,n=2,*r=&m; f(r,&n); printf("%d,%d",m,n);}void f(int*p,int*q){ p=p+1; *q=*q+1;}程序运行后的输出结果是(  )。
    A

    1,3

    B

    2,3

    C

    1,4

    D

    1,2


    正确答案: D
    解析:
    语句p=p+1;只改变指针p的地址,与p的内容无关,所以m值没有改变,而语句*q=*q+1;是改变该指针所指地址中的内容,所以n变为3,m不变,仍为1,答案选择A选项。