临海寻岸® 2022-04-11 21:01 采纳率: 50%
浏览 35
已结题

c++结构体做函数参数使用地址传递出现问题

问题遇到的现象和发生背景

学校正在做毕设项目,每名teacher带领5个学生,总共有3名teacher,需求如下
设计学生和teacher的结构体,其中在teacher的结构体中,有teacher姓名和一个存放5名学生的数组作为成员
学生的成员有姓名、考试分数,创建数组存放3名teacher,通过函数给每个teacher及所带的学生赋值
最终打印出teacher数据以及teacher所带的学生数据。

问题相关代码,请勿粘贴截图
#include<iostream>;
using namespace std;
#include<string>;
#include<ctime>;

struct Student {
    string name;
    int score;

};
struct Teacher {
    string name;
    struct Student sArray[5];
};

void printTeacher(struct Teacher tArray[], int  len) {
    for (int i = 0; i < len; i++) {
        cout <<"老师的姓名为"<< tArray[i].name << endl;
        for (int j = 0; j < 5; j++) {
            cout << "\t学生的姓名为:" << tArray[i].sArray[j].name<<" 学生的成绩为:" << tArray[i].sArray[j].score << endl;
        }
    }
}

void allocateSpace(struct Teacher * tArray[], int* len) {
    string nameseed = "ABCDE";
    string tname = "教师";
    string sname = "教师";
    for (int i = 0; i < *len; i++) {
        tArray[i]->name = tname + nameseed[i];
        for (int j = 0; j < 5; j++) {
            tArray[i]->sArray[j].name = sname + nameseed[j];
            tArray[i]->sArray[j].score = rand() % 61 + 40;
        }
    }
}
int main() {
    srand((unsigned int)time(NULL)); //随机数种子 头文件 #include <ctime>
    struct Teacher tArray[3];
    int len = sizeof(tArray) / sizeof(tArray[0]);
    cout << tArray << endl;

    allocateSpace(tArray, &len);
    printTeacher(tArray, len);

    system("pause");
    return 0;
}

img

img

运行结果及报错内容

调用allocateSpace方法时它提示实参与形参不兼容

img

我的解答思路和尝试过的方法

把指针去掉,使用值传递没有错误
在实参前加入&依然出错

我想要达到的结果

应该如何修改代码在使用指针的情况下达到目的,为什么我这样写会出错
修改改成值传递结果如下:

img

img

  • 写回答

3条回答 默认 最新

  • 关注
    
    #include<iostream>之后多了分号;
    using namespace std;
    #include<string>之后多了分号;
    #include<ctime>之后多了分号;
    
    tArray只是数组,不是指针
    void allocateSpace(struct Teacher * tArray[], int* len) {
    改成
    void allocateSpace(struct Teacher tArray[], int* len) {
    并且
    tArray[i]->name
    改成
    tArray[i].name
    
    tArray[i]->sArray[j].name
    tArray[i]->sArray[j].score 
    改成
    tArray[i].sArray[j].name
    tArray[i].sArray[j].score 
    
    

    你题目的解答代码如下:

    void allocateSpace(struct Teacher tArray[], int* len) {
        string nameseed = "ABCDE";
        string tname = "教师";
        string sname = "教师";
        for (int i = 0; i < *len; i++) {
            tArray[i].name = tname + nameseed[i];
            for (int j = 0; j < 5; j++) {
                tArray[i].sArray[j].name = sname + nameseed[j];
                tArray[i].sArray[j].score = rand() % 61 + 40;
            }
        }
    }
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月20日
  • 已采纳回答 4月12日
  • 创建了问题 4月11日

悬赏问题

  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题