首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小程序求解,该怎么处理

2013-03-21 
小程序求解#include stdio.hvoid fun(int *s){ static int j0do {s[j]s[j]+s[j+1]}while(++j2)}ma

小程序求解
#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

热点排行