1.有以下程式
#include <stdio.h>
int fun(int*x, int n)
{
if (n==1)
return x[1];
else
return x[1]+fun(x+1, n-1);
}main(){
int array[] = {0,9,1,2},res;
res = fun(array,3);
printf("%d",res);
}
解析:通過題目我們可以大緻的知道這是一道遞歸求和的程式題目,那麼我們需要明白fun()函數到底是幹嘛的。
首先在主函數中fun()傳入了數組array和3,将數組array的首位址指派給指針x,n=3不等于0是以fun()傳回的是x[1]+fun(x+1, n-1);
x[1]對應的是數組array[1]=9,那麼x[1]+fun(x+1, n-1)=9+fun(x+1,2).
接下來我們就要再去求fun(x+1,2),而這裡我們第二次調用fun函數是以就是遞歸,那麼我們傳入的參數是x+1和2,因為第一次我們将數組的第二個元素指派給指針x,是以x+1就是将數組的第三個元素指派給x則x+1就是array[2]=1,又因為n=2不等于0,是以我們傳回的是9+1+fun(x+2,1)
最後我們以此類推,n==1了 ,是以傳回的是array[3] = 2,是以最後的結果為9+1+2=12
綜上:我們要明白的一個知識就是每次的x+1其實就是數組中首位址在後移一位指向下一個元素。
2.有以下程式請輸出程式運作結果
#include<stdio.h>
int disp(char *str){
while(*str){//遇到'\0'結束
putchar(*str++);//str依次往後移動
}
return *str;
}
int main() {
printf("%d",disp("NAME"));
}
從程式中看disp函數,while()循環就是依次讀主函數傳入的字元,當遇到‘\0’就結束并且傳回str,