C++结构体

简介: C++结构体

1.概述

前面我们已经了解到c++内置了常用的数据类型,比如int、long、double等,但是如果我们要定义一个学生这样的数据类型,c++是没有的,此时就要用到结构体,换言之通过结构体可以帮我们定义自己的数据类型。

2.结构定义和使用

格式 struct 结构体名{//成员列表};

比如定义一个学生类型结构体

struct Student
{
  string name;
  int age;
 
};

上面定义好了学生这种数据类型,那如何创建一个Student类型的数据呢?有以下三种方式,推荐一二种

第一种

#include <iostream>
#include <string>
using namespace std;
struct Student
{
  string name;
  int age;
 
};
int main() {
  //第一种,创建并赋值
  Student s1;
  s1.name = "张三";
  s1.age = 12;
  cout << s1.age << s1.name;
}

第二种

#include <iostream>
#include <string>
using namespace std;
struct Student
{
  string name;
  int age;
 
};
int main() {
  //第二种
  struct Student s1 = {"李四",12};
 
  cout << s1.age << s1.name;
}

第三种

#include <iostream>
#include <string>
using namespace std;
struct Student
{
  string name;
  int age;
 
}s1;
int main() {
  s1.age = 12;
  s1.name = "lisi";
  cout << s1.age << s1.name;
}

3.结构体数组

#include <iostream>
#include <string>
using namespace std;
//1.定义一个student结构体
struct student
{
  string name;
  int age;
 
};
 
 
int main() {
  //2.定义结构体数组
  struct student arr[3] =
  {
    {"aaa",12},
    {"bbb",12},
    {"ccc",12}
  };
  //3.结构体变量赋值
  arr[2].age = 20;
  arr[2].name = "ddd";
  //4.访问结构体数组
  for (int i = 0; i < 3; i++) {
    cout << arr[i].age << arr[i].name <<endl;
  }
}

4.结构体指针

#include <iostream>
#include <string>
using namespace std;
//1.定义一个student结构体
struct student
{
  string name;
  int age;
 
};
 
 
int main() {
  
  struct student s = { "lisi",12 };
  //2.定义一个结构体指针
  struct student* p = &s;
  //4.使用结构体指针访问结构体中的属性,需要使用->
  cout << p->age << p->name;
  
}

5.嵌套结构体

#include <iostream>
#include <string>
using namespace std;
//1.定义一个student结构体
struct student
{
  string name;
  int id;
};
//2.定义一个嵌套结构体
struct school {
  string name;
  int id;
  struct student s;
};
int main() {
  //3.创建school变量
  school sc = {};
  sc.id = 1;
  sc.name = "清华";
  sc.s.id = 2;
  sc.s.name = "lisi";
  cout << sc.id << sc.name << sc.s.id << sc.s.name << endl;
}

6.结构体作为函数参数传递

第一种作为值传递(不会修改实参)

#include <iostream>
#include <string>
using namespace std;
//1.定义一个student结构体
struct student
{
  string name;
  int id;
};
void p(struct student s);
int main() {
  struct student s = { "lisi",10 };
  p(s);
  cout << "id:" << s.id <<"姓名:"<< s.name<<endl;//id:10姓名:lisi
  return 0;
}
//2.定义一个函数
void p(struct student s) {
  s.id = 100;
  cout << "id:" << s.id <<"姓名:" << s.name << endl;//id:100姓名:lisi
}

 

第二种作为地址传递(会修改实参)

#include <iostream>
#include <string>
using namespace std;
struct student
{
  string name;
  int id;
};
void p(struct student *s);
int main() {
  struct student s = { "lisi",10 };
  p(&s);
  cout << "id:" << s.id <<"姓名:"<< s.name<<endl;//id:100姓名:lisi
  return 0;
}
void p(struct student *s) {
  s->id = 100;
  cout << "id:" << s->id <<"姓名:" << s->name << endl;//id:100姓名:lisi
}

注意:

//使用地址传递可以避免大量变量赋值占用空间的问题,提高效率,但是会修改实参,如何解决?
void p(const struct student* s) {//使用const修饰之后,对于地址传递,只会读不会修改数据
  //s->id = 100;将不能修改
  cout << "id:" << s->id << "姓名:" << s->name << endl;//id:100姓名:lisi
}

 



相关文章
|
7月前
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
341 0
|
7月前
|
C++
C++系列十四:结构体
C++系列十四:结构体
|
7月前
|
C++
.C++中结构体数组docx
.C++中结构体数组docx
50 0
|
4月前
|
C++
c++学习笔记07 结构体
C++结构体的详细学习笔记07,涵盖了结构体的定义、使用、数组、指针、嵌套、与函数的交互以及在结构体中使用const的示例和解释。
42 0
|
3月前
|
存储 算法 C++
【C++核心】结构体、共用体详解
这篇文章详细讲解了C++中结构体和共用体的概念、定义、使用场景和案例,包括结构体的创建、数组、指针、嵌套、函数参数传递,以及共用体的特点和应用实例。
46 4
|
3月前
|
C++
继续更新完善:C++ 结构体代码转MASM32代码
继续更新完善:C++ 结构体代码转MASM32代码
|
4月前
|
C++ 容器
C++中自定义结构体或类作为关联容器的键
C++中自定义结构体或类作为关联容器的键
49 0
|
6月前
|
存储 数据管理 程序员
C++一分钟之-结构体与联合体(Union)
【6月更文挑战第20天】在C++中,结构体(struct)用于组合多种数据类型形成复合类型,成员变量占用独立内存,适合存储不同类型且同时有效的数据。联合体(union)则让所有成员共享同一内存,适合节省空间和进行低级别类型转换,但需小心数据覆盖。通过`struct`和`union`,程序员能构建更灵活的代码,但也需留意内存对齐和数据管理等问题。
92 2
|
5月前
|
存储 程序员 编译器
|
6月前
|
存储 算法 C++
C++结构体
C++结构体