0

0

C++结构体嵌套结构体访问方法

P粉602998670

P粉602998670

发布时间:2025-09-17 14:01:01

|

228人浏览过

|

来源于php中文网

原创

通过点运算符可逐层访问嵌套结构体成员,如person.address.street;初始化可用初始化列表或逐项赋值;常用于表示复杂对象如Car包含Engine和Wheel;结构体与类嵌套方式相同,区别仅在默认访问权限。

c++结构体嵌套结构体访问方法

C++结构体嵌套结构体访问,简单来说就是一层一层地剥开“洋葱”,用点运算符

.
来访问内层结构体的成员。

解决方案:

要访问嵌套结构体中的成员,你需要使用点运算符

.
,就像访问普通结构体成员一样。一层一层地“点”下去,直到找到你想要的成员。

#include 

struct Address {
  std::string street;
  std::string city;
  std::string state;
};

struct Person {
  std::string name;
  int age;
  Address address; // 嵌套的结构体
};

int main() {
  Person person;
  person.name = "Alice";
  person.age = 30;
  person.address.street = "123 Main St";
  person.address.city = "Anytown";
  person.address.state = "CA";

  std::cout << "Name: " << person.name << std::endl;
  std::cout << "Age: " << person.age << std::endl;
  std::cout << "Street: " << person.address.street << std::endl;
  std::cout << "City: " << person.address.city << std::endl;
  std::cout << "State: " << person.address.state << std::endl;

  return 0;
}

这段代码展示了如何定义包含

Address
结构体的
Person
结构体,以及如何通过
person.address.street
这样的方式访问嵌套的
street
成员。

立即学习C++免费学习笔记(深入)”;

如何初始化嵌套结构体?

初始化嵌套结构体,你可以使用初始化列表,这是一种简洁且高效的方式。

#include 
#include 

struct Inner {
  int x;
  double y;
};

struct Outer {
  std::string name;
  Inner inner;
};

int main() {
  // 使用初始化列表初始化
  Outer outer = {"MyOuter", {10, 3.14}};

  std::cout << "Name: " << outer.name << std::endl;
  std::cout << "Inner.x: " << outer.inner.x << std::endl;
  std::cout << "Inner.y: " << outer.inner.y << std::endl;

  // 也可以分开初始化
  Outer anotherOuter;
  anotherOuter.name = "AnotherOuter";
  anotherOuter.inner.x = 20;
  anotherOuter.inner.y = 2.71;

  std::cout << "Name: " << anotherOuter.name << std::endl;
  std::cout << "Inner.x: " << anotherOuter.inner.x << std::endl;
  std::cout << "Inner.y: " << anotherOuter.inner.y << std::endl;

  return 0;
}

这里,

Outer outer = {"MyOuter", {10, 3.14}};
展示了如何一次性初始化所有成员,包括嵌套的
Inner
结构体。 如果你觉得一次性初始化太长,也可以像
anotherOuter
那样,先声明结构体,再逐个赋值。

讯飞星火
讯飞星火

科大讯飞推出的多功能AI智能助手

下载

结构体嵌套结构体在实际开发中的应用场景有哪些?

结构体嵌套在实际开发中用途广泛。 比如,表示一个复杂的对象,例如一个

Car
结构体可以包含一个
Engine
结构体和一个
Wheel
结构体数组。 又比如,在处理网络数据包时,数据包头和数据包体就可以分别定义为结构体,然后将它们嵌套在一起。

#include 
#include 
#include 

struct Engine {
    std::string model;
    int horsepower;
};

struct Wheel {
    int size; // 英寸
    std::string type; // 例如 "合金轮毂"
};

struct Car {
    std::string brand;
    std::string model;
    Engine engine;
    std::vector wheels; // 使用 vector 存储多个 Wheel
};

int main() {
    // 创建一个 Car 对象
    Car myCar;
    myCar.brand = "Toyota";
    myCar.model = "Camry";

    // 初始化 Engine
    myCar.engine.model = "2AR-FE";
    myCar.engine.horsepower = 178;

    // 初始化 Wheels
    myCar.wheels.resize(4); // 4个轮子
    for (int i = 0; i < 4; ++i) {
        myCar.wheels[i].size = 17;
        myCar.wheels[i].type = "铝合金";
    }

    // 打印 Car 的信息
    std::cout << "汽车品牌: " << myCar.brand << std::endl;
    std::cout << "汽车型号: " << myCar.model << std::endl;
    std::cout << "发动机型号: " << myCar.engine.model << std::endl;
    std::cout << "马力: " << myCar.engine.horsepower << std::endl;
    std::cout << "轮子尺寸: " << myCar.wheels[0].size << " 英寸" << std::endl;
    std::cout << "轮子类型: " << myCar.wheels[0].type << std::endl;

    return 0;
}

这个例子展示了如何使用嵌套结构体和

std::vector
来表示更复杂的对象,使得代码结构更清晰,易于维护。

结构体嵌套与类嵌套有什么区别

结构体和类在C++中非常相似,主要区别在于默认访问权限:结构体默认是

public
,而类默认是
private
。 这意味着,如果结构体或类中的成员没有明确指定访问权限,结构体的成员默认是公开的,可以直接访问,而类的成员默认是私有的,需要通过公有方法才能访问。

在嵌套方面,结构体和类的嵌套方式没有区别。 你可以在结构体中嵌套类,也可以在类中嵌套结构体,访问方式都是一样的,通过点运算符

.
来访问。

#include 

struct A {
  int x;
};

class B {
public:
  int y;
};

struct C {
  A a;
  B b;
};

class D {
public:
  struct E {
    int z;
  };
  E e;
};

int main() {
  C c;
  c.a.x = 10;
  c.b.y = 20;

  D d;
  d.e.z = 30;

  std::cout << "c.a.x: " << c.a.x << std::endl;
  std::cout << "c.b.y: " << c.b.y << std::endl;
  std::cout << "d.e.z: " << d.e.z << std::endl;

  return 0;
}

这段代码展示了如何在结构体中嵌套类,以及如何在类中嵌套结构体。 访问方式都是通过点运算符

.
。 关键在于理解结构体和类的默认访问权限的区别。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1503

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

233

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

87

2025.10.17

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

282

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

192

2025.07.04

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

29

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

17

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

15

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 8.2万人学习

C 教程
C 教程

共75课时 | 4.4万人学习

C++教程
C++教程

共115课时 | 15.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号