| |
|
开发:
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语言第七课:结构体 |
第七课:结构体目录 1.1·结构体的声明在说明结构体之前我们先看一个问题:创建图书目录问题 要求说明:Gwen Glenn要打印一份图书目录。他想打印每本书的各种信息:书名、作者、出版社、出版日期、页数、册数和价格。数据类型自定。
因此结构体我们掌握和了解3个技巧: ①为结构建立一个格式或样式 ②声明一个适合该样式的变量 ③访问结构变量的各个部分
结构的声明: 结构声明描述了一个结构的组织布局。在结构声明中用一对花括号括起来的是结构成员列表。每个成员都用自己的声明来描述。如果把结构声明置于函数外部,那么该声明之后所有函数都能使用它的标记。例如:struct book dickens;这样函数便创建了一个结构变量dickens,该变量的结构布局是book。 就计算而言,下面的声明:
? 结构体变量的定义和初始化:有了结构体类型,那如何定义变量,其实很简单。
简言之(这里用图书目录哪里的数据):我们使用在一对花括号中括起来的初始化列表进行初始化,各初始化项用逗号分隔。因此,title成员可以被初始化为一个字符串,value成员可以被初始化为一个数字。为了让初始化项与结构中各成员的关联更加明显,我们让每个成员的初始化项独占一行。这样做知识为了提高代码的可读性,对编译器而言,只需要用逗号分隔开各成员的初始化项即可。 ? 扩展知识:结构的初始化器 C99和C11为结构提供了指定初始化器。结构的指定初始化器使用点运算符和成员名(而不是方括号和下标)标识特定的元素。例如:只初始化book结构的value成员,可以这样做:
? 1.2·结构体成员的访问结构体变量访问成员:结构变量的成员是通过点操作符(.)访问的(也可以用->访问,这里不谈)。点操作符接受两个操作数。 ?
结构体指针访问指向变量的成员有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。那该如何访问成员? 如下:
1.3·结构体传参道理相同直接上代码把,大家好好看看就行:
思考:print1 和 print2 函数哪个好些? 答案:首选print2函数 原因:函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。 结论:结构体传参的时候,要传结构体的地址。 1.4·C99中复合字面量和结构C99的复合字面量特性可用于结构和数组。如果只需要一个临时结构值。复合字面量很好用。例如,可以使用复合字面量创建一个结构作为函数的参数或赋给另一个结构。语法是把类型名放在括号中,后面紧跟一个花括号括起来的初始化列表。例如:下面是struct book类型的复合字面量: (struct book) {"The Idiot","Fyodor Dostoyevsky",6.99} 举例: ?如果复合字面量在所有函数的外部,就具有静态存储期; 如果复合字面量在块里,就具有自动存储期; 复合字面量中可以使用指定初始化器。 1.5·C99中伸缩型数组成员C99新增了一个特性:伸缩型数组成员,利用这项特性声明的结构,其最后一个数组成员具有一些特征。第1个特征是,该数组不会立即存在。第2个特征是,使用这个伸缩型数组成员可以编写合适的代码,就好像它确实存在并具有所需数目的元素一样。这可能听起来很奇怪,所以我们来一步步地创建和使用一个带伸缩型数组成员的结构。 首先,声明一个伸缩型数组成员有如下规则: ①伸缩型数组成员必须是结构的最后一个成员 ②结构中必须至少有一个成员 ③伸缩数组的声明类似于普通数组,只是它的方括号中是空的 实例:
声明一个struct flex类型的结构变量时,不能用scores做任何事情,因为没有给这个数组预留存储空间。实际上,C99的意图并不是让你声明struct flex类型的变量,而是希望你声明一个指向struct flex类型的指针,然后用malloc()来分配足够的空间,以存储struct flex类型结构的常规内容和伸缩型数组成员所需的额外空间。例如:假设用scores表示一个内含5个double类型值的数组,可以这样做:
现在有足够的存储空间存储count、average和一个内含5个double类型值的数组。可以用指针pf访问这些成员:
1.6·C11中的匿名结构匿名结构是一个没有名称的结构成员。为了理解它的工作原理,我们先考虑如何创建嵌套结构:
这里,name成员是一个嵌套结构,可以通过类似ted.name.first的表达式访问"red";例如:puts(ted.name.first)。 在C11中,可以用嵌套的匿名成员结构定义person:
? ? ? |
|
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/24 10:56:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |