黑马程序员技术交流社区

标题: 一个小问题????求指教!!感谢!!! [打印本页]

作者: FlyTrem    时间: 2014-3-22 19:28
标题: 一个小问题????求指教!!感谢!!!
  1. #include<conio.h>
  2. #include<stdio.h>
  3. #define N 20
  4. int fun(float *s,int n,float *aver)
  5. {
  6.     float ave,t=0.0;
  7.     int count = 0,k,i;
  8.    
  9.     for(k = 0;k < n;k++)
  10.       t + =s[k];
  11.     ave = t / n;
  12.     for(i=0;i<n;i++)
  13.       if(s[i]<ave)
  14.         count++;
  15.     *aver = ave
  16.     return count;
  17. }
  18. int main()
  19. {
  20.     float s[30],aver;
  21.     int m,i;
  22.     printf("plase enter m:");
  23.     scanf("%d",&m);
  24.     printf("please enter %d mark:\n",m)
  25.     for(i=0;i<m;i++)
  26.       scanf("%f",s+i) ;
  27.    printf("the number of students :\n",fun(s,m,&aver));
  28.    printf("ave=%f\n",aver);
  29.    return 0;
  30. }
复制代码

#include<conio.h>
#include<stdio.h>
#define N 20
int fun(float *s,int n,float *aver)
{
    float ave,t=0.0;
    int count = 0,k,i;
   
    for(k = 0;k < n;k++)
      t + =s[k];
    ave = t / n;
    for(i=0;i<n;i++)
      if(s<ave)
        count++;
    *aver = ave
    return count;
}
int main()
{
    float s[30],aver;
    int m,i;
    printf("plase enter m:");
    scanf("%d",&m);
    printf("please enter %d mark:\n",m)
    for(i=0;i<m;i++)
      scanf("%f",s+i)
   printf("the number of students :\n",fun(s,m,&aver));
   printf("ave=%f\n",aver);
   return 0;
}
#include<conio.h>
#include<stdio.h>
#define N 20
int fun(float *s,int n,float *aver)
{
    float ave,t=0.0;
    int count = 0,k,i;
   
    for(k = 0;k < n;k++)
      t + =s[k];
    ave = t / n;
    for(i=0;i<n;i++)
      if(s<ave)
        count++;
    *aver = ave
    return count;
}
int main()
{
    float s[30],aver;
    int m,i;
    printf("plase enter m:");
    scanf("%d",&m);
    printf("please enter %d mark:\n",m)
    for(i=0;i<m;i++)
      scanf("%f",s+i)
   printf("the number of students :\n",fun(s,m,&aver));
   printf("ave=%f\n",aver);
   return 0;
}
为什么把*aver = ave 改为aver = &ave 不对???感觉是对的?哪里的问题!!!!

作者: 周宇华    时间: 2014-3-22 20:34
本帖最后由 周宇华 于 2014-3-22 20:36 编辑

*aver = ave;的意思是把局部变量ave的值赋给形参指针aver(fun函数里的指针aver)所指向空间(即实参&aver)的内容,这样fun函数结束后,形参aver指针和局部变量ave都被释放,但是实参aver指针(main函数里的&aver)所指向空间的内容确实改变了;
改为aver = &ave后,只是将形参aver的指针指向修改了指向局部变量ave的地址,而没有改变实参&aver的指向,等到fun函数结束后,形参aver指针和局部变量ave都会被释放,实参&aver还是原来指向,且内容也根本没有变化。这样就表示函数没有起到效果。
作者: FlyTrem    时间: 2014-3-22 20:38
周宇华 发表于 2014-3-22 20:34
*aver = ave;的意思是把局部变量ave的值赋给形参指针aver(fun函数里的指针aver)所指向空间(即实参&aver ...

Thanks!!!谢谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2