64,654
社区成员
发帖
与我相关
我的任务
分享
#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;
}
#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;
}
运行不出结果
指针是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];
}
}