A-A+
有以下程序 point(char *p) { p+=3; } main() { char b
问题详情
有以下程序 point(char *p) { p+=3; } main() { char b[4]={"a"."b","c","d"}, *p=b; point(p); printf("%cn",*p); } 程序运行后的输出结果是
A.a
B.b
C.c
D.d请帮忙给出正确答案和分析,谢谢!
参考答案
正确答案:A
解析:本题是一个陷阱,看似考查函数的传址调用,其实考的是传值调用。在C语言中,不管你给函数传递的参数是什么,指针也好数组名也罢,系统都是严格的将实参的值复制了一份作为函数的形参,即传值调用。在函数中,对形参中的值怎么改变都不会影响到实参。那传址调用又是怎么实现的呢?那是因为在函数中改变的不是形参指针变量中的值,而是形参指针变量所指内存中的值。其实骨子里还是将实参指针的值复制?一份给形参指针变量,它们是两个独立的互不相干的变量,只不过指向的内存地址值一模一样罢了。本题的函数只是改变了形参指针变量p的值,这对程序没有任何影响,主函数中p一开始就是指向b[0],最后输出时还是b[0]的值'a'。所以应该选择A。