结构体类型

C语言结构体及其内存布局

匿名 (未验证) 提交于 2019-12-02 23:41:02
结构体的定义 结构体的定义要使用struct关键字,并以";"结尾。 下面找个微软定义的结构体: typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } FILETIME, *PFILETIME, *LPFILETIME; 可以看出在定义结构体时使用了typedef,为_FILETIME起了一个别名,并定义了指向改结构 的指针PFILETIME。 结构体变量的初始化与赋值操作 使用初始化列表进行初始化 例如: FILETIME ft = { 88,99 }; 还可以使用memset进行清零初始化: FILETIME ft memset(&ft,0,sizeof(ft)); 结构体变量赋值 C++11标准之前只能在结构体变量初始化的时候可以使用列表进行初始化, 现在支持C++11标准的编译器可以在任意场合使用列表进行赋值,编译时不会报错. 例: C++11标准还可以直接在定义结构体时为每个成员指定初值,例: 但是最后还是不要使用新标准这两个特性,因为在不支持C++11标准的编译器上会报错, 一个空结构体的大小 一个空结构体的大小为1字节,而不是零字节 例: 计算结构体大小 结构体成员对齐值 typedef struct tagTest { char m_chTest; int m_nTest;

go语言中struct结构体的使用

匿名 (未验证) 提交于 2019-12-02 23:32:01
一、struct的特点 1、用来自定义复杂数据结构 2、struct里面可以包含多个字段(属性) 3、struct类型可以定义方法,注意和函数的区分 4、struct类型是值类型 5、struct类型可以嵌套 6、GO语言没有class类型,只有struct类型 二、struct的定义 1、struct声明: type 标识符 struct { Name string Age int Score int } 2、struct 中字段访问:和其他语言一样,使用点 例子 type Student struct { Name string Age int Score int } func main(){ var stu Student stu.Name = "lilei" stu.Age = 22 stu.Score = 20 fmt.Printf("name=%s age=%d score=%d",stu.Name,stu.Age,stu.Score) } 3、struct定义的三种形式: a:   var stu Student b:  var stu Student = new(Student) c:  var stu Student = &Student{} (1)其中b和c返回的都是指向结构体的指针,访问形式如下 stu.Name、stu.Age和stu.Score 或者(

C语言JSON序列化/反序列化

早过忘川 提交于 2019-12-02 23:30:31
最近想找一个C语言处理嵌套结构体和结构体数组的json库,理想的是能够很容易处理复杂结构体嵌套,并且使用简单的,但是没找到比较合适的,于是打算自己封装一个; 两个问题: C语言结构体本身没有元数据,这也就没法在生成过程中自动分析类型进行处理,所以,需要生成对应结构体的元数据信息,根据元数据完成对结构体的序列化和反序列化; 结构体的嵌套很复杂,需要支持多层结构体和结构体数组直接互相嵌套的序列化反序列化,于是考虑使用递归函数,结合1中的元数据,进行结构体偏移和处理; 考虑如下步骤: 配置xml文件,文件中配置结构体,结构体中的成员属性,以及它们之间的关系; 结合Tinyxml库编写解析xml文件的工具,通过这个工具生成包含结构体,结构体元数据(包含结构体关系,成员名称,类型,偏移,大小等),序列化/反序列化接口的头文件; 抽离公共的json操作函数到公共头文件,这些操作函数通过元数据和偏移的方式处理结构体和json,更深入部分则使用了cJSON库; 模块引用2中生成的头文件,然后通过结构体指针,即可完成结构体序列化成json,以及json反序列化成结构体; 花了两天时间来做这些事情,初步测试了下,功能正常,也达到了我预期的一行代码序列化,一行代码反序列化的高级语言的json操作特性; 总之,满意; 来源: https://www.cnblogs.com/wanpengcoder/p

eMMC驱动分析

匿名 (未验证) 提交于 2019-12-02 22:56:40
作者:Aningsk ,本作品采用 知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议 基于ATMEL-sama5d3芯片与Linux-3.6.9内核。 SD卡系列简介 这些都是网上找出来的,权当作为开场白了。 MMC卡全称Multi Media Card,由西门子公司和SanDisk公司1997年推出的多媒体记忆卡标准。MMC卡尺寸为32mm x24mm x 1.4mm,它将存贮单元和控制器一同做到了卡上,智能的控制器使得MMC保证兼容性和灵活性。MMC卡具有MMC和SPI两种工作模式,MMC模式是默认工作模式,具有MMC的全部特性。而SPI模式则是MMC协议的一个子集,主要用于低速系统。 SD卡全称Secure Digital Memory Card,由松下、东芝和SanDisk公司于1999年8月共同开发的新一代记忆卡标准,已完全兼容MMC标准。SD卡比MMC卡多了一个进行数据著作权保护的暗号认证功能,读写速度比MMC卡快4倍。尺寸为32mm x 24mm x2.1mm,长宽和MMC卡一样,只是比MMC卡厚了0.7mm,以容纳更大容量的存贮单元。SD卡与MMC卡保持向上兼容,也就是说,MMC卡可以被新的设有SD卡插槽的设备存取,但是SD卡却不可以被设有MMC插槽的设备存取。 SDIO全称Secure Digital Input and Output

有一次接口设计

匿名 (未验证) 提交于 2019-12-02 22:56:40
小李最近手头在做的task,需要暴露新的接口出去给客户。 ========================我是正文分割线============================= <<<<<<<需求>>>>>>> ---------------------------------------------------------------------------------------------------------- 需要暴露一个汽车特征点的接口,输入是一张图像,输出是汽车上的特征点,landmark。 ---------------------------------------------------------------------------------------------------------- so easy?输入基本不用管,输出那就定义一个结构体不就完事了吗?假设这一代的算法支持一辆车100个ladmark点。over了。 版本1 typed struct LM { uint x[100]; uint y[100]; } 方法很简单,问题很明显: 1.如果算法升级了,支持的特征点数变多了,怎么破?直接把点数写死是不是不太好? 2. 将来怎么扩展?如果需要支持更多的东西,比如车的颜色,型号等等呢? 好,所以小李就跑去跟同事讨论,最后得到了一个高灵活度的接口

.NET Core CSharp初级篇 1-1

匿名 (未验证) 提交于 2019-12-02 22:06:11
本节内容是对于C#基础类型的存储方式以及C#基础类型的理论介绍 例如以下这句话:“张三是一名程序员,今年15岁重50.3kg,他的代号是‘A’,他家的经纬度是(N30,E134)。”,这句话就是一个字符串,使用双引号括起来。而15则表示是一个 整数类型 ,50.3就是小数类型,不过我们在 C# 中通常称为 浮点类型 ,最后一个经纬度,我们通常定位地点的时候都是成对出现,所以我们认为这二者是一个密不可分的结构,这种类型我们称为 结构体类型(struct) 。 以上我所说的数据类型都是一个所含有信息量一定的数值,我们称为 值类型 ;而张三这个人,他所含有的数据大小是不固定的,比如我又了解到了张三是一个富二代,那么他就会增加一个属性是富二代,我们需要更多的空间去存储他,张三这个变量我们通常就称为引用类型,而张三这个名字,我们就称为引用,如果你对C或者C++熟悉的话,张三这个名字就是指向张三这个人(对象)的一个 指针 。 在 C# 中,数据在内存中的存储方式主要分为在堆中存储和栈中存储。我们之前提到的值类型就是存储在栈中,引用类型的数据是存储在堆中,而数据是在栈中。 值类型:存储在栈(Stack,一段连续的内存块)中,存储遵循先进后出,有严格的顺序读取访问速度快,可通过地址推算访问同一个栈的其余变量。 引用类型:引用(本质上和C++中的指针一致)存储在栈中,内含的数据存储在堆中

C结构体的初始化和赋值

♀尐吖头ヾ 提交于 2019-12-02 10:55:51
https://www.cnblogs.com/luoxiao23/p/11230412.html 1.结构体的初始化 结构体是常用的自定义构造类型,是一种很常见的数据打包方法。结构体对象的初始化有多种方式,分为指定初始化、顺序初始化、构造函数初始化。假如有如下结构体。 struct A { int b; int c; } (1)指定初始化(Designated Initializer)实现上有两种方式,一种是通过点号加赋值符号实现,即“.fieldname=value”,另外一种是通过冒号实现,即“fieldname:value”,其中fieldname为指定的结构体成员名称。前一种是C99标准引入的结构体初始化方式,但在C++中,很多编译器并不支持。 //点号+赋值符号 struct A a={.b = 1,.c = 2}; //冒号 struct A a={b:1,c:2}; Linux内核喜欢用“.fieldname=value”的方式进行初始化,使用指定初始化,一个明显的优点是成员初始化顺序和个数可变,并且扩展性好,比如增加字段时,避免了传统顺序初始化带来的大量修改。 (2)顺序初始化是我们最常用的初始化方式,因为书写起来较为简约,但相对于指定初始化,无法变更初始化顺序,灵活性较差。 struct A a1={1,2}; (3)构造函数初始化常见于C++代码中,因为C+

go学习笔记

烂漫一生 提交于 2019-12-02 08:08:39
转自 https://www.cnblogs.com/xhen/p/11106776.html go学习笔记 0、值类型:变量直接存储值,内存通常在栈中分配:int、float、bool、string以及数组和struct   引用类型:变量存储的是一个地址,这个地址存储最终的值。内存通常在堆上分配。通过gc回收:指针、slice、map、chan等都是引用类型 使用&结构体{}就相当与使用new实例化了一次结构体 1、变量(或常量)包含数据,这些数据可以有不同的数据类型,简称类型。使用 var 声明的变量的值会自动初始化为该类型的零值。类型定义了某个变量的值的集合与可对其进行操作的集合。  类型可以是基本类型,如:int、float、bool、string;结构化的(复合的),如:struct、array、slice、map、channel;只描述类型的行为的,如:interface。  结构化的类型没有真正的值,它使用 nil 作为默认值(在 Objective-C 中是 nil,在 Java 中是 null,在 C 和 C++ 中是NULL或 0)。值得注意的是,Go 语言中不存在类型继承。  比如:定义变量的两种方式 var i int=15 或 i :=15     定义数组:arr1 :=[] int { } 数组名称 数组长度 数组里面的类型 数组值 2

Go语言基础之结构体

一笑奈何 提交于 2019-12-02 06:50:20
Go语言基础之结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。 一 、类型别名和自定义类型 1.1 自定义类型 在Go语言中有一些基本的数据类型,如 string 、 整型 、 浮点型 、 布尔 等数据类型, Go语言中可以使用 type 关键字来定义自定义类型。 自定义类型是定义了一个全新的类型。我们可以基于内置的基本类型定义,也可以通过struct定义。例如: //将MyInt定义为int类型 type MyInt int 通过 Type 关键字的定义, MyInt 就是一种新的类型,它具有 int 的特性。 1.2 类型别名 类型别名是 Go1.9 版本添加的新功能。 类型别名规定:TypeAlias只是Type的别名,本质上TypeAlias与Type是同一个类型。就像一个孩子小时候有小名、乳名,上学后用学名,英语老师又会给他起英文名,但这些名字都指的是他本人。 type TypeAlias = Type 我们之前见过的 rune 和 byte 就是类型别名,他们的定义如下: type byte = uint8 type rune = int32 1.3 类型定义和类型别名的区别 类型别名与类型定义表面上看只有一个等号的差异,我们通过下面的这段代码来理解它们之间的区别。 /

Go语言基础之反射

ε祈祈猫儿з 提交于 2019-12-02 06:49:24
Go语言基础之反射 本文介绍了Go语言反射的意义和基本使用。 一 、变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息。 值信息:程序运行过程中可动态变化的。 二 、反射介绍 反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。 Go程序在运行期使用reflect包访问程序的反射信息。 在上一篇博客中我们介绍了空接口。 空接口可以存储任意类型的变量,那我们如何知道这个空接口保存的数据是什么呢? 反射就是在运行时动态的获取一个变量的类型信息和值信息。 三 、reflect包 在Go语言的反射机制中,任何接口值都由是 一个具体类型 和 具体类型的值 两部分组成的(我们在上一篇接口的博客中有介绍相关概念)。 在Go语言中反射的相关功能由内置的reflect包提供,任意接口值在反射中都可以理解为由 reflect.Type 和 reflect.Value 两部分组成,并且reflect包提供了 reflect.TypeOf 和 reflect.ValueOf