为什么运行起来没有输出啊


#include<stdio.h>
#define N 3
//结构体的定义
typedef struct student
{
    int id;
    float sorce;
 }STU;
 //定义fun()函数 
 void fun(STU stu[],STU *s)
 {
     float min;
     int i;
     min=stu[0].sorce;
     s=&stu[0];
     for(i=1;i<N;i++)
     {
         if(min>stu[i].sorce)
         {
             min=stu[i].sorce;
             s=&stu[i];
         }
     }
  } 
  int main()
  {
      STU a[N]={{201901,80.5},{201902,98.2},{201903,84.3}};
      STU *s;
    fun(a,s);
    printf("%d %f",s->id ,s->sorce) ;
    return 0;
  }

#include<stdio.h>
#define N 3
//结构体的定义
typedef struct student
{
    int id;
    float sorce;
 }STU;
 //定义fun()函数 
 STU * fun(STU stu[],STU *s)
 {
     float min;
     int i;
     min=stu[0].sorce;
     s=&stu[0];
     for(i=1;i<N;i++)
     {
         if(min>stu[i].sorce)
         {
             min=stu[i].sorce;
             s=&stu[i];
         }
     }
     return s;
  } 
  int main()
  {
      STU a[N]={{201901,80.5},{201902,98.2},{201903,84.3}};
      STU *s;
      
    s=fun(a,s);
    printf("%d %f",s->id ,s->sorce);
    return 0;
  }

这样子写就能正常输出,为什么啊?是不是fun()函数形参s不能传递到主函数的原因?

因为你的s指针本该代表a数组的首地址 但你忘了写 s是未初始化的指针 老师上课没说指针要初始化吗


#include<stdio.h>
#define N 3
//结构体的定义
typedef struct student
{
    int id;
    float sorce;
}STU;
//定义fun()函数 
void fun(STU stu[], STU* s)
{
    float min;
    int i;
    min = stu[0].sorce;
    s = &stu[0];
    for (i = 1;i < N;i++)
    {
        if (min > stu[i].sorce)
        {
            min = stu[i].sorce;
            s = &stu[i];
        }
    }
}
int main()
{
    STU a[N] = { {201901,80.5},{201902,98.2},{201903,84.3} };
    STU* s=&a;
    fun(a, s);
    printf("%d %f", s->id,s->sorce);
    return 0;
}