| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 【C语言】结构体详解 -> 正文阅读 |
|
[C++知识库]【C语言】结构体详解 |
CSDN话题挑战赛第2期 前言
一.认识结构体
二.结构体声明
假如我们想描述一本书,如果用单一的变量我们可能无法涵盖所有的信息。
三.特殊的声明3.1 不完全声明
上面两个结构在定义时省略掉了结构体标签(tag) 3.2 p = &x合法么 四.结构体自引用4.1 结构体能够包含自己么
此时编译器会报错,为什么呢? next是我们定义的的一个结构体变量,需要占用内存,但他的大小是多大呢?next里面又含有一个next,如果真的这样定义,next的大小会变成无穷大,因此编译失败。 那么应该如何编译呢?
当结构体自引用的时候,我们使用指针,因为指针的大小是确定的,因此不会出现上面的情况。 4.2 typedef
这样我们在定义结构体变量的时候,就可以使用重定义的名字,会稍微便捷一点。
五.结构体变量定义和初始化有了前面的铺垫,那如何定义结构体变量其实很简单。
可以声明的同时定义如p1,也可以在后面定义如p2.
赋值时成员之间用逗号隔开。
当我们在在结构体中嵌套结构体时,定义时注意在{}里面再使用一个{}来给里面的结构体赋值。 六.结构体内存对齐既然我们已经掌握了结构体的基本使用,那么应该怎么样计算结构体的大小呢?是将所有成员所占的空间相加么?显然不是的。(这是一个考点) 计算结构体之前,我们需要先了解一下计算的规则。
1.计算结构体大小
运行结果: 第一个元素对齐偏移量为0的地址处,char类型占据一个字节,i为int类型,大小为4小于VS默认值8,因此i对齐4,又因为整体大小需要占据最大对齐数(这道题为4)的整数倍处,因此大小为12.
运行结果: 用练习1的方法我们能轻易地算出S3的大小是16,S3里的最大对齐数是8,因此S3对齐到8的位址,d对齐到24的位址,加起来为32是最大对齐数8的倍数。
七·.修改对齐数
运行结果: 八.结构体传参我们都知道函数传参既能传值又能传址,那么当我们想要传递结构体的时候我们应该传哪一种呢?
最后
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 12:53:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |