itgle.com
更多“有以下程序: point(char *p){p+=3;} main() {char b[4]={'a','b','c','d',},*p=b; ”相关问题
  • 第1题:

    有以下程序: point(char *p){P+=3;) main() { char b[4]={'a','b','c','d'},*p=b; point(p);printf("%c\n",*p); } 程序运行后的输出结果是( )。

    A.a

    B.b

    C.c

    D.d


    正确答案:A
    解析:本题的考点是C语言的函数参数的传递方式(传值)。函数poret的形参是一个char型指针p,当调用point(p)时,将指针p的值传递给形参,函数point中的p+=3,并不影响主程序main中的p值,因此函数调用结束后,p仍指向b的首地址,输出*p的值应是字符a。

  • 第2题:

    有以下程序 point(char *p) { p+=3; } main() { char b[4]={'a'.'b','c','d'}, *p=b; point(p); printf("%c\n",*p); } 程序运行后的输出结果是

    A.a

    B.b

    C.c

    D.d


    正确答案:A
    解析:本题是一个陷阱,看似考查函数的传址调用,其实考的是传值调用。在C语言中,不管你给函数传递的参数是什么,指针也好数组名也罢,系统都是严格的将实参的值复制了一份作为函数的形参,即传值调用。在函数中,对形参中的值怎么改变都不会影响到实参。那传址调用又是怎么实现的呢?那是因为在函数中改变的不是形参指针变量中的值,而是形参指针变量所指内存中的值。其实骨子里还是将实参指针的值复制?一份给形参指针变量,它们是两个独立的互不相干的变量,只不过指向的内存地址值一模一样罢了。本题的函数只是改变了形参指针变量p的值,这对程序没有任何影响,主函数中p一开始就是指向b[0],最后输出时还是b[0]的值'a'。所以应该选择A。

  • 第3题:

    有以下程序 point(char*p){p+=3;} main() { char b[4]={'a','b','c','d'},*p=b; point(p);printf("%c\n",*p); } 程序运行后的输出结果是

    A.a

    B.b

    C.c

    D.d


    正确答案:A
    解析:虽然函数的参数是一个指针,但函数体只对指针p进行了操作,并不会影响主函数中的指针p,因为传递的参数是p,而不是p的地址,所以输出的字符是b[0],即为a。

  • 第4题:

    下列程序的输出结果是( )。

    char*point(char*pt):

    main

    { char b[4]={'a','c','s','f'),*pt=b;

    pt=point(pt);

    printf("%c\n",*pt);

    }

    point(char*p)

    { p+=3;

    return p;

    }

    A.s

    B.c

    C.f

    D.a


    正确答案:C
    本题考查函数的调用及参数传递,当执行函数point时,刚开始指针P指向“a”,经过+3,指针p指向“f”,所以最后的输出结果是f。

  • 第5题:

    有以下程序 point(char*p){ p+=3; } main() { char b[4]={'a','b','c','d'},*p=b; point(p); printf("%c\n",*p); } 程序运行后的输出结果是______。

    A.a

    B.b

    C.c

    D.d


    正确答案:A