题1:

 
    
  1. #include   
  2.  
  3. int main(void)  
  4. {  
  5.     int sum=0;  
  6.     int a[][4]={1,2,3,5,8,13,21,34,56};  
  7.     int (*ptr)[4]=a;  
  8.     sum=(*ptr)[1]+a[0][3]+a[1][2];  
  9.     ptr++;  
  10.     sum+=(*ptr)[2];  
  11.     printf("sum=%d\n",sum);  //49  
  12.  
  13.     return 0;  

题2:

 
    
  1. #include   
  2. union 
  3. {  
  4.     int x;  
  5.     char y[3];  
  6. }w;  
  7.  
  8. int main()  
  9. {  
  10.     w.y[0]=10;  
  11.     w.y[1]=1;  
  12.     printf("%d\n",w.x); //266  
  13.     return 0;  
  14. }  

 题3:用递归实现n的阶乘
    1)比较低级的写法: 

 
    
  1. #include   
  2.  
  3. int ask(int a,int *sum)  
  4. {  
  5.     (*sum)*=a;  
  6.     if(a>1)  
  7.     {  
  8.         a--;  
  9.         ask(a,sum);  
  10.     }  
  11.     else 
  12.         return *sum;  
  13.     return 0;  
  14. }  
  15.  
  16. int main()  
  17. {  
  18.     int sum=1;  
  19.     ask(3,&sum);  
  20.     printf("%d\n",sum);  
  21.     return 0;  

 2)一般会这样写

 
    
  1. #include   
  2. #include   
  3. /*int ask(int a)  
  4. {     
  5.     if(a>1)    
  6.         return a*ask(a-1);  //return a*ask( a--); 这样,就错   
  7.                             //return a*ask( --a);这样总少一个  
  8.     else 
  9.         return 1;  
  10. }*/ 
  11.  
  12. int ask(int a)  
  13. {     
  14.     return (a>1)?(a*ask(a-1)):1;  
  15. }  
  16.  
  17. int main()  
  18. {  
  19.     int sum=0;    
  20.     sum=ask(5);  
  21.  
  22.     printf("%d\n",sum);  
  23.     return 0;