下面程序的运行结果是[ ]。 #include <stdio.h> int f(int a[],int n) { if(n>1) return a[0]+f(a+1,n-1);

admin2009-03-16  30

问题 下面程序的运行结果是[  ]。
        #include <stdio.h>
        int f(int a[],int n)
        { if(n>1)
            return a[0]+f(a+1,n-1);
         else
            return a[0];
        }
        main()
        {int aa[10]={12,3,4,5,6,7,8,9,10},s;
           s=f (aa+2,4);   printf("%d\n",s); }

选项

答案18

解析 实参中aa+2是指将数组元素3的地址传递绐形参a,应当注意—点,用数纽名作函数实参时,不是把数组的值传给形参,而是把实参数组的地址传绐形参数组,两个数组共用一段内存单元。所以a[]={3,4,5,6,7,8,9,10),n=4,a[0]=3。形参中a+1表示数组元素4的地址传递绐形参a,所以a[0]+f(a+1,n-1)=3+f(a+1)),3),此时a[]={4,5,6,7,8,9,10),n=3,a[0]=4。n=3同样满足n>1的条件a[0]+f(a+1,n-1)=4+f(a+1,2)此时a[]={5,67,8,9,10},n=2, a[0]=5。n=2同样满足n>1的条件a[0]+f(a+1,n-1)=5+f(a+1,2)此时a[]={6,7,8,9,10},n=1,a[0]=6。n=1不再满足条件返回a[0]=6, 6+5+4+3=18,所以最后的结果为18。
转载请注明原文地址:https://kaotiyun.com/show/7lXp777K
0

最新回复(0)