```c++
#include<iostream>
#include<string>
#include<iomanip>
#define managenum 315
#define managecode 315
using namespace std;
struct pen
{
int basic = 0;
int zh = 0;
int penscore = 0;
};
struct student
{
string num = 0;
string name = 0;
string classroom = 0;
struct pen pe;
};
void displaypen(student std[4])
{
cout << "学号" << setw(5) << "姓名" << setw(5) << "班级" << "基本概念成绩(50)" << setw(5) << "综合应用成绩(50)" << setw(5) << "笔试成绩(60)" << endl;
for (int i = 0; i < 4; i++)
{
cout << std[i].num << setw(5) << std[i].name << setw(5) << std[i].pe.basic << setw(5) << std[i].pe.zh << setw(5) << std[i].pe.penscore << setw(5) << std[i].com.computerscore << endl;
}
}
int main()
{
student stdu[4];
displaypen(stdu[4]);
}

首先解答你图片中的问题:
displaypen(stdu[4])改成 displaypen(stdu)就可以了,原因如下:
displaypen(stdu[4])这么写的时候,stdu[4]是一个student 类型的元素,而不是结构体数组,而且,sudu[4]越界了。而stdu是结构体数组stdu的首地址,所以直接写成 displaypen(stdu)就可以了。
另外,还有几个问题:
(1)你的displaypen函数中 std[i].com.computerscore这个地方,student结构体中,没有com这个变量,是不是应该改成
stu[i].classroom
(2)结构体数据的初始化,不能在声明变量的时候初始化,可以添加构造函数的方式初始化,如下:
struct pen
{
int basic ;
int zh ;
int penscore ;
pen(){basic =0;zh=0;penscore=0;}
};
struct student
{
string num;
string name;
string classroom ;
struct pen pe;
student(){num=""; name="";classroom="";} //string类型初始化为"",而不是0
};
displaypen(stdu[4]);
改成
displaypen(stdu);
传递stdu数组时直接写数组名,不应该加数组长度或数组下标
如有帮助,望采纳!谢谢!