c++ 结构体问题

来源:百度知道 编辑:UC知道 时间:2024/09/23 03:12:09
程序代码:
#include<iostream>
#include<iomanip>
using namespace std;
struct student
{int num;
char name[8];
int score[3];
};
int main()
{ int i,j;
void print(student stu[5]);
student stu[5];
for(i=0;i<5;i++)
{cout<<"请输入第"<<i+1<<"个学生的数据"<<endl;
cout<<"学号: ";
cin>>stu[i].num;
cout<<"姓名: ";
cin>>stu[i].name;
for(j=0;j<3;j++)
{cout<<"科目"<<j+1<<"成绩";
cin>>stu[i].score[j];}
cout<<endl;
}
print(stu[5]);
return 0;
}
void print(student stu[5])
{int i,j;
cout<<" 学号 姓名 成绩1 成绩2 成绩3"<<endl;
for (i=0;i<5;i++)
{cout<<stu[i].num<<" "<<setw(10)<<stu[i].name<<" ";
f

void print(student stu[5]) 其实相当于 void print(student *stu),也是就形参只接受实参的首地址,后面是stu[5]还是stu[50]都没有影响.
一个数组的数组名代表数组的首地址址,print(stu)就是把这个数组的首地址传递给函数print(),如果是把用stu[5]则是把stu数组的第6个元素的地址传递过去,当然会出错.

因为数组的名其实就是一个指针, 只是其指向的位置不能改变, 函数传参时:

int fun(int [] a);



int fun(int* a);

是等效的.
print(stu);

传的是数组名stu, 即一个指针,

如果写成print(stu[5]);

传的就是一个元素str[5], 和函数原形:

void print(student stu[5]);

不符, 所以出错.

数组的模子其实就是指针, 建议你加深对数组和指针之间共性的理解, 对你以后会有帮助的.

因为对数组做参数来说,传的是地址。而数组的名字本身就是地址,所以直接把名字传入就行了。