小程序求解
#include <stdio.h>
void fun(int *s)
{ static int j=0;
do {s[j]=s[j]+s[j+1];}while(++j<2);
}
main()
{ int k,a[10]={1,2,3,4,5};
for(k=1;k<3;k++) fun(a);
for(k=0;k<5;k++) printf("%d",a[k]);
printf("\n");
}
输出结果是35745
疑问:1、实参向形参传递数据不是单向的吗,怎么实参的数据改变了?
2、我认为j增加到2就停止循环了,结果不应该是35345吗?
[解决办法]
1. 因为传递的是指针,即地址传递。不是值传递
2. for(k=1;k<3;k++) fun(a); 两次调用了fun(a),第一次调用,函数内部两次循环,j的值变为2,a[]是35345,第二次调用,由于j是static变量,进行一次循环,j的值变为3,a[]是35745