C语言【文件读写】的问题

各位学长,为什么用fprintf写入,也会出现乱码?代码太长,我截取片段
struct stu
{
int numb;
char name[10];
int score;
}student[100];

void write(int n)
{
int i;
FILE *fp=fopen("file.txt","a+");
for(i=0;i<n;i++)
{
fprintf(fp,"%d %s %d\n",&student[i].numb,&student[i].name,&student[i].score);
}
fclose(fp);
printf("录入结束!\n");
}

for(m=0;m<a;m++)
{
scanf("%d%s%d",&student[m].numb,&student[m].name,&student[m].score);
}
write(a);

在文本却显示学号和成绩都是一串数字了,如下

4373608 jat 4373624
4373628 kay 4373644
4373648 ktt 4373664

scanf才需要取地址,(f)printf都不需要。

&student[i].numb
去掉&

fprintf是 以二进制的方式写入的吧。以文本的形式打开就是乱码了

其实这个道理很简单,scanf需要给传入的变量赋值嘛,所以需要指针。否则函数怎么将输入的值再传给主程序呢?
而printf是输出,除了字符串以外,对于整数,它只要获得这个参数而无需改变它,所以不用指针。