结构体概括

结构体也属于构造类型.结构体比数组更加灵活,可以存放不同类型的变量

结构体是由若干组成员组成的,成员既可以是基本数据类型.又可以是构造类型,比如数组

结构体属于自定义数据类型

1.结构体声明:

struct 结构体名

{

类型说明符  成员名;

…;

类型说明符  成员名;

};  //注意此处分号不能少.

结构体是自定义类型,结构体变量是由结构体类型修饰的变量.

定义结构体变量

struct 结构体名 变量名 = {初值} ;

结构体成员访问

结构体成员的表示形式

结构体变量,成员

typedef为现有的类型创建一个新的名字,或称为类型别名

typedef  原类型 新类型

typedef int integer

这样

int a = 10;

可以写成:

integer a = 10;

结构体变量可以直接赋值

注意

虽然数组和结构体都属于构造类型,但是结构体变量能直接赋值,数组不能直接赋值

小技巧:

可以通过把数组放在结构体内实现数组的直接赋值

结构体内存占用:

结构体所占的空间可以简单的认为是各个成员所占内存的空间之和

实际上是最大成员变量所占空间的最小整数倍

当数组这种构造类型的数据整体所占的字节数大于结构体成员变量中最大的数据类型所占的字节时,数组就会拆分对齐

计算机中内存对齐原则的本质就是为了CPU能够有效的通过地址访问相关内存.

结构体嵌套

结构体的成员仍然可以是结构体

结构体数组

可以将多个结构体变量放到数组中,构成结构体数组.

例如: struct stu students[10]

可以通过下标可以访问每个结构体变量

结构体概括,布布扣,bubuko.com

时间: 2024-10-12 23:23:34

结构体概括的相关文章

结构体和值类型(转)

如果你曾经使用过 Objective-C 或者像 Ruby,Python,JavaScript 这样的语言,可能会觉得 Swift 里的结构体就像外星人一样奇异.类是面向对象编程语言中传统的结构单元.的确,和结构体相比,Swift 的类支持实现继承,(受限的)反射,析构函数和多所有者. 既然类比结构体强大这么多,为什么还要使用结构体?正是因为它的使用范围受限,使得结构体在构建代码块 (blocks) 的时候非常灵活.在本文中,你将会学习到结构体和其他的值类型是如何大幅提高代码的清晰度.灵活性和可

Linux字符设备中的两个重要结构体(file、inode)

对于Linux系统中,一般字符设备和驱动之间的函数调用关系如下图所示 上图描述了用户空间应用程序通过系统调用来调用程序的过程.一般而言在驱动程序的设计中,会关系 struct file 和 struct inode 这两个结构体. 用户空间使用open()系统调用函数打开一个字符设备时( int fd = open("dev/demo", O_RDWR) )大致有以下过程: 在虚拟文件系统VFS中的查找对应与字符设备对应 struct inode节点 遍历字符设备列表(chardevs

FFmpeg源码简单分析:结构体成员管理系统-AVOption

===================================================== FFmpeg的库函数源码分析文章列表: [架构图] FFmpeg源码结构图 - 解码 FFmpeg源码结构图 - 编码 [通用] FFmpeg 源码简单分析:av_register_all() FFmpeg 源码简单分析:avcodec_register_all() FFmpeg 源码简单分析:内存的分配和释放(av_malloc().av_free()等) FFmpeg 源码简单分析:常

对于结构体中内存对齐的简单说明

结构体内存对齐的原因: 在运行一个结构体时,编译器需要给结构体中的每个变量成员分配内存空间,如这样一个结构体中 typedef struct A { char c1; int i; int j; }A; 对其内存空间分配问题进行分析,如若不进行内存对齐,它的内存空间是: char类型变量c1占1个字节,紧接着int类型变量i与j分别占4个字节,总有9个字节,在访问时,如图1,访问次数较多:在图2中,总有12个字节空间,虽然浪费了c1后的三个字节空间,访问次数却变少,会很大程度上节省了时间,提高了

FFmpeg源代码分析:结构体成员管理系统-AVOption

本文继续上篇文章<FFmpeg源代码分析:结构体成员管理系统-AVClass>中的内容,记录FFmpeg中和AVOption相关的源代码.AVOption用于在FFmpeg中描述结构体中的成员变量.一个AVOption可以包含名称,简短的帮助信息,取值等等. 上篇文章简单回顾 上篇文章中概括了AVClass,AVOption和目标结构体之间的关系.以AVFormatContext为例,可以表示为下图. 有关上篇文章的内容,这里不再重复.总体来说,上篇文章主要概括了AVClass,AVOptio

FFmpeg源代码分析:结构体成员管理系统-AVClass

打算写两篇文章记录FFmpeg中和AVOption有关的源代码.AVOption用于在FFmpeg中描述结构体中的成员变量.它最主要的作用可以概括为两个字:"赋值".一个AVOption结构体包含了变量名称,简短的帮助,取值等等信息. 所有和AVOption有关的数据都存储在AVClass结构体中.如果一个结构体(例如AVFormatContext或者AVCodecContext)想要支持AVOption的话,它的第一个成员变量必须是一个指向AVClass结构体的指针.该AVClass

C++知识点(四)类与对象,结构体、联合体、枚举类

对象:属性和行为:将同一类属性和行为抽象为类 1.面向对象的基本特点: 抽象:将同一类对象的共同属性和行为进行概括,形成类 封装: 将抽象出的数据.代码封装到一起,视为一个整体 增加安全性和简化编程 多态:同一名称.不同功能实现方式,减少标识符个数 继承:在已有类的基础上进行扩展,形成新的类,有利于代码重用 2.内联成员函数:类中声明定义,类外定义inline 3.构造函数: 用于对类的对象初始化,在对象创建时自动调用 没有return语句 可以有形参,可以无形参 可以是内联函数 可以重载 可以

关于结构体

1.结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构. typedef struct People { int a; char b; double c; }P: 其中:struct是关键词, People是标签, a b c是成员, P是此结构体声明的变量. 于是在声明变量的时候就可:P p1; 这里的P实际上就是struct People的别名.P==struct People 另外这里也可以不写People(于是也不能struct People p1;了,

Linux C中结构体初始化

    在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式.该方式是某些C教材(如谭二版.K&R二版)中没有介绍过的.这种方式称为指定初始化(designated initializer).下面我们看一个例子,Linux-2.6.x/drivers/usb/storage/usb.c中有这样一个结构体初始化项目: static struct usb_driver usb_storage_driver = { .owner = THIS_MODULE, .name = "