结构体——结构体基本用法,结构体初始化
存储数据时如果需要存储多个数据我们可以使用数组。而如果同时需要存储多种数据可以采用结构体的方式存储。用结构体的方式定义的数据类型是一种构造数据类型抽象数据类型是由各种的基本数据类型组成的。结构体弥补了基本数据类型单一性的缺点。下面的代码展示了声明结构体变量时的一些注意事项结构体基础1. 结构体的基本定义方法struct Student //结构体名首字母大写区分变量 { string name; float score; int age; int level; }; //结构体结束{}外有表示结束定义2. 空结构体struct EmptyStruct //空结构体 { //TODO };3. 匿名结构体struct //匿名结构体不指定结构体名无法使用该结构体定义变量 { string name; float score; int age; int level; }stu1, stu2; //可以在结束前定义变量这样的结构体是一次性的4. 使用typedefC语言常用typedef关键字定义新的类型名这里是Student_C以方便使用。typedef struct // c语言中不能直接使用Student定义变量需要使用struct Student表明类型 // 一般使用typedef关键字给struct Student定义一个新的类型名方便调用 { string name; float score; int age; int level; }Student_C;C无需typedef可直接使用定义好的结构体命名来定义结构体变量。5. 结构体可以多层嵌套struct Location //嵌套结构体 { int x; int y; int z; }; struct Target //结构体可以多层嵌套 { int index; string name; Location location; }; int main() { Target target1; std::cout input a int for target1.location.x: ; std::cin target1.location.x; //访问嵌套结构体内容 std::cout target1.location.x std::endl; }结构体初始化和使用1. 给结构体赋初值可以在创建结构体变量时用大括号赋值内部把给变量赋的值按照顺序用逗号隔开。下面的代码展示了如何创建一个有嵌套结构体的结构体变量并赋值并且展示了其中内容#include iostream struct Birthday { int year; int month; int day; }; struct Student //结构体名首字母大写区分变量 { std::string name; float score; int age; int grade; Birthday birthday; }; int main() { Student student { Li, 86.5, 21, 3, {2000, 10, 1} }; std::cout student info: std::endl name: student.name std::endl score: student.score std::endl age: student.age std::endl grade: student.grade std::endl birthday: student.birthday.year , student.birthday.month , student.birthday.day std::endl; }2. c中结构体的初始化方法在定义时初始化#include iostream struct Data { int x 1; int y 1; int z 1; }; int main() { Data data1{}; Data data2 {}; Data data3 { 0 }; std::cout data1: x: data1.x y: data1.y z: data1.z std::endl; std::cout data2: x: data2.x y: data2.y z: data2.z std::endl; std::cout data3: x: data3.x y: data3.y z: data3.z std::endl; }输出data1: x: 1 y: 1 z: 1data2: x: 1 y: 1 z: 1data3: x: 0 y: 1 z: 1在定义结构体时可以在结构体内直接初始化成员变量来给结构体成员一个默认值。在定义结构体时使用data{}变量名跟大括号方式初始化或是使用data{}变量名 等于 大括号方式初始化都是直接将结构体初始化为默认值。而使用data {0}变量名 等于 {0}只能将结构体中的第一个变量初始化为0。手动初始化Data data3; data3 { 0, 0, 0 };定义后使用memset初始化Data data3; memset(data3, 0, sizeof(data3));memset用法C 库函数void *memset(void *str, int c, size_t n)用于将一段内存区域设置为指定的值。其首个参数str为指向要清除内存区域的指针中间参数为要初始化的目标值类型为int在函数中会自动转化为目标类型最后一个参数是要清除区域的大小。常用sizeof取变量的大小用标识符表示变量所在的地址。给结构体添加一个初始化表或者构造函数struct DataIniList { int num1; int num2; int num3; DataIniList() :num1(0), num2(0), num3(0) {} //给结构体添加初始化表 }; struct DataConst { int num1; int num2; int num3; DataConst() //给结构体添加构造函数在构造函数中手动赋初值 { num1 0; num2 0; num3 0; } };使用Static关键字使用Static关键字未初始化的变量会被自动赋值0。但是使用static关键字会将变量声明为静态变量。3. 将结构体作为函数参数直接将结构体类型放在函数的参数表。// 打印Student结构体内容的函数将Student类型结构体作为参数 void printStudentInfo(Student student) { std::cout student info: std::endl name: student.name std::endl score: student.score std::endl age: student.age std::endl grade: student.grade std::endl birthday: student.birthday.year , student.birthday.month , student.birthday.day std::endl; } int main() { Student student { Li, 86.5, 21, 3, {2000, 10, 1} }; //创建结构体Student类型变量student并赋初值 Student student2 { Zhang, 79.0, 21, 3, {2000, 8, 10} }; printStudentInfo(student); printStudentInfo(student2); }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2420911.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!