选择题   以下程序运行后的输出结果是
    #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);  }
 
【正确答案】 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。