有以下程序 point(char *p) { p+=3; } main() { char b[4]={’a’.’b’,’c’,’d’}, *p=b; point(p); printf("%c\n",*p)

admin2009-01-15  20

问题 有以下程序    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

答案1

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

相关试题推荐
最新回复(0)