C++自学笔记005

    科技2025-01-14  10

    C++自学笔记005

    结构体

    #include <iostream> using namespace std; #include <string> //结构体:用户自定义的数据类型,允许用户存出不同的数据类型 //定义格式:struct 结构体名 {结构体成员列表}; //创建一个学生数据类型:学生包括(姓名,年龄,分数) struct Student { //成员列表 string name; // 姓名 int age; // 年龄 int score; // 分数 } s3; //结构体嵌套结构体 //例子:每个老师辅导一个学院,一个老师的结构体中嵌套另一个学生的结构体 //1、定义老师的结构体 struct teacher { int id; //老师编号 string name; //老师姓名 int age; //老师年龄 struct Student stu; //老师辅导的学生 } //结构体做函数的参数(值传递,地址传递) //1、定义一个打印结构体的函数 //值传递函数 void printstu1(struct Student stu) { stu.age = 150; cout << "姓名:" << stu.name << " 年龄:" << stu.age << " 分数:" << stu.score << endl; } //地址传递函数 void printstu2(struct Student *ps) { ps->age = 150; cout << "姓名:" << ps->name << " 年龄:" << ps->age << " 分数:" << ps->score << endl; } //const的使用情形 //当传入函数的数据特别庞大时,比如是结构体数组,里面油耗几万条数据,但是如果用值传递, //则在传入数据时会占用大量内存,但是如果使用地址传递,则传入的始终是四个字节的地址信息, //不会占用太大空间,但是地址传递有一个缺点,就是在函数内如果不小心对数据进行修改的话, //则原始数据就会跟着修改,对数据库造成篡改,所以可以在定义函数的时候,在变量列表中使用指针变量, //同时在前面加上const,这样,在自定义函数内部如果对结构体数据进行篡改,就会报错,这样可以确保数据不会被随意篡改。 void printstu2(const struct Student *ps) //加入了const以确保结构体变量为常量,不可修改 { ps->age = 150; //在这里进行了篡改,系统运行时会报错 cout << "姓名:" << ps->name << " 年龄:" << ps->age << " 分数:" << ps->score << endl; } int main() { //通过学生数据类型来创建学生变量的方法三种: //(1) struct Student s1; struct Student s1; //给s1属性赋值,通过‘.’来访问结构体变量中的属性 s1.name = "张三"; s1.age = 20; s1.score = 100; cout << "姓名:" << s1.name << " " << "年龄:" << s1.age << " " << "分数:" << s1.score << endl; //(2) struct Student s2 = { ... }; struct Student s2 = {"王五", 21, 98}; cout << "姓名:" << s2.name << " " << "年龄:" << s2.age << " " << "分数:" << s2.score << endl; //struct可以省略 //(3) 在定义结构体时顺便创建结构体变量。(见结构体定义语句最后s3) s3 = {"小明", 22, 99}; cout << "姓名:" << s3.name << " " << "年龄:" << s3.age << " " << "分数:" << s3.score << endl; //结构体数组 //语法格式:struct 结构体名 数组名[元素个数] = {{...}, {...}, {...}, ...}; //1、创建结构体数组: struct Student stuarray[3] = { {"张三", 18, 100}, {"李四", 28, 99}, {"王五", 38, 60} }; //2、给结构体数组中的元素赋值: stuarray[2].name = "李六"; stuarray[2].age = 80; stuarray[1].score = 99; //3、遍历结构体数组 for (int i = 0; i < 3; i++) { cout << " 姓名:" << stuarray[i].name << " 年龄:" << stuarray[i].age << " 分数:" << stuarray[i].score << endl; } //结构体指针 //结构体指针可通过->符号对结构体属性进行访问 //1、创建结构体指针变量 student001 = {"张三", 18, 100}; //2、通过指针指向结构体变量 struct Student *p = &student001; //3、通过指针访问结构体变量中的数据 cout << "姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl; //结构体嵌套结构体 //例子:每个老师辅导一个学院,一个老师的结构体中嵌套另一个学生的结构体 //2、创建老师 struct teacher teac ; teac.id = 10000; teac.name = "老王"; teac.age = 50; teac.stu.name = "小王"; teac.stu.age = 20; teac.stu.score = 100; //3、输出老师信息 cout << " 老师姓名:" << teac.name << " 老师编号:" << teac.id << " 老师年龄:" << teac.age << endl << " 辅导学生姓名:" << teac.stu.name << " 辅导学生年龄:" << teac.stu.age << " 辅导学生分数:" << teac.stu.score << endl; //结构体做函数的参数(值传递,地址传递) //2、定义结构体变量 struct Student s4; s4.name = "赵六"; s4.age = 25; s4.score = 95; //3、使用结构体函数进行打印 printstu1(s4); //值传递 printstu2(&s4); //地址传递 cout << "姓名:" << s4.name << " 年龄:" << s4.age << " 分数:" << s4.score << endl; system("pause"); return 0; } //VC6.0不能输出字符串问题,用字符型数组进行输出会正常,用字符串类型可以再VS2019上进行 #include <iostream> #include <string> #include <sstream> using namespace std; struct student { char name[256]; //int number; int age; int score; }; int main() { student s = {"lizhong", 20, 100}; //student s = {27, 23, 100}; cout << "name:" << s.name << " age:" << s.age << " score:" << s.score << endl; //cout << "number:" << s.number << " age:" << s.age << " score:" << s.score << endl; system("pause"); return 0; } //案例:学校在做毕业设计,每名老师带着五名学生,总共三名老师 //设计老师的结构体,结构体中有老师姓名和五名学生的数组,学生成员信息 //有姓名、年龄、分数,给三个老师的结构体内容赋值,并在屏幕上打印 #include <iostream> #include <ctime> #include <string> using namespace std; //学生结构体 struct student { string sname; //学生姓名 int age; //学生年龄 int score; //学生分数 }; //老师结构体 struct teacher { string tname; struct student s[5]; }; //给老师和学生赋值的函数 void allocatespace(struct teacher t[], int len) { string nameseed = "ABCDE"; for (int i = 0; i < len; i++) { t[i].tname = "Teacher_"; t[i].tname += nameseed[i]; for (int j = 1; j < 5; j++) { t[i].s[j].sname = "Student_"; t[i].s[j].sname += nameseed[j]; t[i].s[j].age = 22; int random = rand() % 61 + 40; //生成随机数值以代表毕设分数 t[i].s[j].score = random; } } } //打印信息函数 void printof(struct teacher t; int len) { for(int i = 0; i < len; i++) { cout << "老师姓名:" << t[i].tname << endl; for(int j = 0; j < 5; j++) { cout << "\t学生姓名:" << t[i].s[j].sname << " 学生年龄:" << t[i].s[j].age << " 学生毕设分数:" << t[i].s[j].score << endl; } } } int main() { //随机数种子 srand((unsigned int)time(NULL)); //给老师和学生赋值 struct teacher t[3]; int len = 3; //int len = sizeof(t) / sizeof(t[0]); allocatespace(t, len); //打印老师和学生的信息 printof(t, len); system("pause"); return 0; }
    Processed: 0.023, SQL: 8