当前位置:编程学习 > C/C++ >>

#include<stdio.h> int b=1; int fun(int *a) {b=b+a[0]; return b; }

void main() { inta[]={1,2,3,4,5,6},i; for(i=0;i<2;i++) {b=b+fun(a+i); printf("%d",b); } }帮我算算这个输出是多少啊。谢了,为啥我算出来第一次结果是3。怎么算的啊?
补充:补充下,答案是4和12,怎么算的?
答案:b=b+fun(a+i);  这个式子 先 计算 fun(a+i);  再算 b+fun(a+i);
由于 b 是全局量,fun(a+i);  的调用 改变了  b ,再算 b+fun(a+i);  b要用新b.
 
b=1; 初值
i=0;
fun(a+i);   新b = a[0]+b = 1+1 = 2; 
b=b+fun(a+i);  新新b =  新b + 新b = 2+2 = 4
b=4; 更新了
i=1;
fun(a+i);   注意a[0] 位置增了i,  a[0] 实际为2,新b = a[0]+b = 2+4 = 6;
b=b+fun(a+i);  新新b =  新b + 新b = 6+6 = 12。
其他:首先看for循环,第一次进来之后i = 0;
计算b = b+fun(a+i);对于这个表达式先算右面 因为 b 初始化为“1” 
 所以 右面为 1+ fun(a+0);然后进入fun()函数 因为a+0 相当于数组a的第0个偏移 ,也就是a本身,然后 计算 b = b+a【0】 ;
所以b = 1 + 1 ;即 b = 2;所以第一次循环之后 b 变成了3; 
 
也许是编译器的问题吧:编译器的理解可能是先算 fun()函数,然后将b的值变成了2,然后2+2 算出来是4,然后第二次循环 还是先算fun()函数 b变成了 6,所以6 + 6 算出来是12  ,估计是这个样子。

上一个:c语言:打开文件
下一个:不是说c语言的转义符\b是向后一格吗,为什么没起作用?我自学,自己在简单的小程序里尝试。

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,