问题 单项选择题

以下程序运行后的输出结果是 #include<stdio.h> void f(int *P); main(){  int a[5]={1, 2, 3, 4, 5}, *r=a;  f(r); printf("%d\n", *r); } void f(int *P){ P=p+3; printf("%d, ", *P); }

A.1,4

B.4,4

C.3,1

D.4,1

答案

参考答案:D

解析: 本题解题的关键是:实参和形参之间发生的是单向值传递,形参指针p的指向发生了改变,但并不影响实参指针r的指向。指针r指向数组的第一个元素a[0],并把a[0]的地址传递给形参p,执行"p=p+3;"后,指针p指向元素a[3],输出*p的值即输出元素a[3]的值4。由于形参p的指向发生改变并不影响实参r,所以r仍然指向a[0],*r的值即为元素a[0]的值1。所以程序的输出结果为4,1。

单项选择题
单项选择题