问题
单项选择题
以下程序运行后的输出结果是 #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。