结构体基本概念

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型

结构体定义和使用

语法:struct 结构体名 { 结构体成员列表 };

通过结构体创建变量三种方式

1、struct 结构体名 变量名(struct可省略)

2、struct 结构体名 变量名 = { 成员1值,成员2值... }(struct可省略)

3、定义结构体时顺便创建变量

struct Student{
  string name;
  int age;
  int score;
}s3;	//3、定义结构体时顺便创建变量

int main(){
  //1、struct 结构体名 变量名(struct可省略)
  struct Student s1;
  s1.name="  "
  s1.age = 18;
  s1.score = 100;

  //2、struct 结构体名 变量名 = { 成员1值,成员2值... }(struct可省略)
  struct Student s2={ "李四",19,80 };
}

结构体数组

将自定义的结构体放入数组中方便维护

语法:struct 结构体 数组名{元素个数} = { {},{},...{} }

struct Student{
  string name;
  int age;
  int score;
}	

int main(){
  //创建结构体数组
  struct Student stu[3]={
    {"张三",18,100},
    {"李四",28,99},
    {"王五",38,66} 
  }

  //给结构体数组中的元素赋值
  stu[2].name="李华";

  //遍历结构体数组
  for(int = 0;i<3;i++){
    cout<<"姓名:"<<stu[i].name<<endl;
  }
  
}

结构体指针

通过指针访问结构体中的成员

利用操作符->可以通过结构体指针访问结构体属性

struct Student{
  string name;
  int age;
  int score;
}	

int main(){
  //创建结构体变量
  struct Student s={"张三",18,100};

  //通过指针指向结构体变量
  Student *p = &s;

  //通过指针访问结构体变量中的数据
  cout<<"姓名:"<<p->name<<end1;
  
}

结构体嵌套结构体

结构体中的成员可以是另一个结构体

struct student{
  string name;
  int age;
  int score;
}

struct teacher{
  int id;
  string name;
  int age;
  struct student stu;
}	

int main(){
  teacher t;
  t.id = 10000;
  t.name = "老王";
  t.age = 20;
  t.stu.age=20;
  t.stu.score=60;

}

结构体做函数参数

将结构体作为参数向函数中传递

两种传递方式

1、值传递

2、地址传递

如果不想修改主函数中的数据,用值传递,反之用地址传递

struct student{
  string name;
  int age;
  int score;
}

//值传递
void printStudent1(struct student s){
  cout<<"姓名:"<<s.name<<endl;
}

//地址传递
void printStudent2(struct student *s){
  cout<<"姓名:"<<s->name<<endl;
}

int main(){
  struct student s;
  s.name = "张三"
  s.age = 20;
  s.score = 85;

  printStudent1(s);
  printStudent2(&s);
}

结构体中const使用场景

用const来防止误操作

struct student{
  string name;
  int age;
  int score;
}

void printStudent(const student *s){
  s->age = 150;//加入const之后,一旦有修改操作就会报错,可以防止误操作
  cout<<"年龄:"<<s->age<<endl;
}

int mian(){
  struct student s = {"张三",15,70} 
  printStudent(&stu)
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐