结构体数组引用

comeonBao 2017-07-17 09:41:35
自己在学习结构体数组时,编了一个以下的程序,我希望*pStu这个指针可以在类里每一个函数都能调用,可是不知道原因,下面程序,可以编译,运行不出结果,问题主要*pStu这个数组指针的赋值

#include <iostream>
using namespace std;
class test
{
public:
void Stu(double data[]);
void test1();
void test2();
struct student
{
double Num;
double Eng;
double math;
};

public:
struct student *pStu;
int Num;
};
void test::Stu(double data[])
{
//这里肯定有问题
for(int i=0; i<Num; ++i)
{
pStu[i].Num=data[3*i];
pStu[i].Eng=data[3*i+1];
pStu[i].math=data[3*i+2];
}

}
void test::test1()
{
for(int i=0; i<Num; ++i)
{
cout<<pStu[i].Num<<endl;
}
}

void test::test2()
{
for(int i=0; i<Num; ++i)
{
cout<<pStu[i].Eng<<endl;
}
}
int main()
{
double data[]={1,80,90,2,50,60,3,20,50};

test howto;
howto.Num=3;
howto.Stu(data);
howto.test1();
howto.test2();

return 0;
}

...全文
179 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2017-07-18
  • 打赏
  • 举报
回复
在你的基础上稍微把它完善了下 增加了两个构造函数和析构函数,等


#include <iostream>
using namespace std;
class test
{
public:
    test():Num(0), pStu(0){}
    test(double data[], int num) :Num(num)
    {
        pStu = new student[Num];
    }
    ~test(){ delete []pStu; }

    void Stu(double data[], int num);
    void test1();
    void test2();
    struct student
    {
        double Num;
        double Eng;
        double math;
    };

private:
    struct student *pStu;
    int Num;
};
void test::Stu(double data[], int num) 
{
    if (pStu == NULL || num > Num) //原本未分配内存或者已经分配内存但是却不足以存储下当前的个数,重新分配
    {
        delete []pStu;
        pStu = new student[num];
    }

    Num = num;
    //这里肯定有问题
    for (int i = 0; i < Num; ++i)
    {
        pStu[i].Num = data[3 * i];
        pStu[i].Eng = data[3 * i + 1];
        pStu[i].math = data[3 * i + 2];
    }
}
void test::test1()
{
    for (int i = 0; i < Num; ++i)
    {
        cout << pStu[i].Num << endl;
    }
}

void test::test2()
{
    for (int i = 0; i < Num; ++i)
    {
        cout << pStu[i].Eng << endl;
    }
}
int main()
{
    double data[] = { 1, 80, 90, 2, 50, 60, 3, 20, 50 };

    test howto;
    //howto.Num = 3;
    howto.Stu(data, 3);
    howto.test1();
    howto.test2();

    return 0;
}
战在春秋 2017-07-18
  • 打赏
  • 举报
回复
运行不出结果
指针是C语言的难点,规则很多,其中一条: 使用指针前应将其初始化。 void test::Stu(double data[]) { //这里肯定有问题 pStu = new struct student[Num]; //加上这行就行,pStu指向student数组的首地址,数组大小为3。 for (int i = 0; i < Num; ++i) { pStu[i].Num = data[3 * i]; pStu[i].Eng = data[3 * i + 1]; pStu[i].math = data[3 * i + 2]; } }
sdghchj 2017-07-17
  • 打赏
  • 举报
回复
指针变量要指向有效的地址后才能访问它指向的东东。 int a[10] = {1,2,3,4……}; int *p = a; p[0] = 11; p[1] = 12; …… ------------------------------------------------------------ int *p = new int[10]; p[0] = 11; p[1] = 12; …… delete [ ] p;

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧