#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,怎么算的?
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是向后一格吗,为什么没起作用?我自学,自己在简单的小程序里尝试。