结构体类型

C语言结构体

Deadly 提交于 2020-03-31 08:06:43
1. 引入 问题域:跟问题本身相关的一些因素,元素,条件等这些 分析问题,需求,目标 算法思路 解决方案域: 与具体的解决问题的方式,方法相关的一些因素,条件 数学 = 》数学方法(公式,方程) C 语言 = 》算法模型、存储类型、语法 ... 问题域 = 》解决方案域 要把问题域里面的因素 = 》解决方案域的因素 “人” 在解决方案域用什么描述 建模 :来描述问题 现实世界物体需要抽象成计算机语言中数据类型 学生: 学号 =>int 姓名 =>char[] 性别 =>char/int 年龄 =>int 地址 =>char[] ... => 这些物体的属性组合到一个数据类型中 C 语言中允许程序员定义自己的组合类型 结构体 联合体 / 共用体 枚举 2. 结构体 : 自定义的一种组合数据类型 2.1 定义 struct 结构体名 { 成员类型 1 成员名 1; 成员类型 2 成员名 2; 成员类型 3 成员名 3; .... }; 结构体名 :符合 C 语言中标识符的规定 struct 结构体名 =>( 你定义的 ) 新类型的名字 成员类型 :C 语言任意合法的数据类型都可以 成员名 : 符合 C 语言中标识符的规定 eg: struct student { int num; char name[32]; char sex; int age; char addr[32]; }; =

Go语言入门(五)结构体&练习

喜你入骨 提交于 2020-03-30 17:29:25
结构体&练习 结构体 定义 Go中的面向对象是通过 struct来实现的,struct是用户自定义的类型 //定义结构体 /定义结构体 type User struct { Name string Gender string Age int AvatarUrl string } func useStruct() { //初始化结构体1 var user1 User user1.Name = "jeson" user1.Gender = "male" user1.Age = 20 user1.AvatarUrl = "http://baidu.com" //初始化结构体2 user2 := User{ Name: "miky", Gender: "female", Age: 18, } fmt.Println(user1,user2) //空结构体 user3 := User{} fmt.Println(user3) } 结构体的特性 struct的内存布局:占用一段连续的内存空间 结构体没有构造函数,需要自己实现 //定义结构体 type User struct { Name string Gender string Age int AvatarUrl string } // 定义构造函数 func NewUser(name,gender string,age int,url

Go语言入门(六)结构体后续&指针

坚强是说给别人听的谎言 提交于 2020-03-30 17:25:16
结构体后续&指针 指针 变量和内存地址 每个变量都有内存地址,可以通过变量来操作对应的内存 func varMem() { var a int32 = 100 fmt.Printf("addr %p\n",&a) } func pointMem() { var b int32 b = 32 var a *int32 fmt.Printf("addr of a:%v\ntype of a %T\n",a,a) //取出a的地址和类型 a = &b fmt.Printf("a %d addr:%p\ntype of a:%T\nb %d addr %p\n",*a,&a,a,b,&b) } 指针的定义与取值 & : 取地址 * : 取指针对应的值 充分判断指针为nil的情况 func pointMem1() { var a *int b := 200 a = &b *a = 400 fmt.Printf("a=%v,adda=%p,type a=%#T\nb=%v,addb=%p,type b=%#T\n",*a,a,a,b,&b) } func pointMem2() { var a *int var b int = 100 if a == nil { a = &b } fmt.Printf("addr a=%p,value a=%d\naddr b=%p,value b=%d\n"

C++中结构体的的慨念和使用方法

时光总嘲笑我的痴心妄想 提交于 2020-03-30 16:02:39
什么是结构体?   简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。   定义结构体使用struct修饰符,例如: C++ 代码 struct test {  float a;  int b; };   上面的代码就定义了一个名为test的结构体,它的数据类型就是test,它包含两个成员a和b,成员a的数据类型为浮点型,成员b的数据类型为整型。   由于结构体本身就是自定义的数据类型,定义结构体变量的方法和定义普通变量的方法一样。 test pn1;   这样就定义了一test结构体数据类型的结构体变量pn1,结构体成员的访问通过点操作符进行, pn1.a=10 就对结构体变量pn1的成员a进行了赋值操作,   注意:结构体生命的时候本身不占用任何内存空间,只有当你用你定义的结构体类型定义结构体变量的时候计算机才会分配内存。   结构体,同样是可以定义指针的,那么结构体指针就叫做结构指针。   结构指针通过-

2020.3.23第四次作业

你说的曾经没有我的故事 提交于 2020-03-30 02:58:57
一、学习笔记 学习范围:3.2.1结构类型、3.2.2结构与函数、3.2.3 结构中的结构 二、相关程序 三、遗留问题 对于以下结构定义, ++p->str 中的 ++ 加在__ D __。 (2分) struct { int len; char *str; } *p; A. 指针str上 B.指针p上 C.str指的内容上 D.以上均不是 解析:p是一个结构体指针,结构体指针访问成员用"->",结构体变量用"." 来源: https://www.cnblogs.com/qipaopao001120/p/12571345.html

转自

别来无恙 提交于 2020-03-25 03:40:05
有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重要的三个函数是pack(), unpack(), calcsize() pack(fmt, v1, v2, ...) 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) unpack(fmt, string) 按照给定的格式(fmt)解析字节流string,返回解析出来的tuple calcsize(fmt) 计算给定的格式(fmt)占用多少字节的内存 struct中支持的格式如下表: Format C Type Python 字节数 x pad byte no value 1 c char string of length 1 1 b signed char integer 1 B unsigned char integer 1 ? _Bool bool 1 h short integer 2 H unsigned short integer 2 i int integer 4 I unsigned int integer or long 4 l long integer 4 L unsigned long long 4 q long long long

VC++中内存对齐

不想你离开。 提交于 2020-03-24 03:01:27
我们经常看到求 sizeof(A) 的值的问题,其中A是一个结构体,类,或者联合体。 为了优化CPU访问和优化内存,减少内存碎片,编译器对内存对齐制定了一些规则。但是,不同的编译器可能有不同的实现,本文只针对VC++编译器,这里使用的IDE是VS2012。 #pragma pack()是一个预处理,表示内存对齐。布局控制#pragma,为编译程序提供非常规的控制流信息。 /**********结构体的大小的规则*************/ 结构体大小是处理器位数和结构体内最长数据元素所占字节数二者中较小的那一个的整数倍。 比如说,假设处理器位数为n,结构体内最大数据元素所占字节数为m。 处理器为32位,n = 4;结构体内最大数据类型为short,m = 2; n > m;结构体大小为m的整数倍,反之亦然。 注意:有些虽然是64位的操作系统,但是编译器却是32位的,此时位数为32. 1 class A{ 2   int a; 3   char b; 4   short c; 5 }; sizeof(A)为8,为4的整数倍。 1 struct B{ 2 short a; 3 short b; 4 short c; 5 }; sizeof(B)为6,为2(sizeof(short))的整数倍。 注意:C++中的结构体与类只有一个区别,就是结构体成员默认是public

iOS分类底层实现原理小记

廉价感情. 提交于 2020-03-23 02:30:38
摘要:iOS分类底层是怎么实现的?本文将分如下四个模块进行探究分类的结构体编译时的分类分类的加载总结本文使用的runtime源码版本是objc4-680文中类与分类代码如下//类@interfacePerson:NSObject@property(nonatomic,copy)NSString*presonName;@end@implementationPerson-(void)doSomeThing{NSLog(@"Person");}@end//分类@int iOS 分类底层是怎么实现的? 本文将分如下四个模块进行探究 分类的结构体 编译时的分类 分类的加载 总结 本文使用的runtime源码版本是 objc4 - 680 文中类与分类代码如下 //类 @interface Person : NSObject @property (nonatomic ,copy) NSString *presonName; @end @implementation Person - (void)doSomeThing{ NSLog(@"Person"); } @end // 分类 @interface Person(categoryPerson) @property (nonatomic ,copy) NSString *categoryPersonName; @end

GLSL语言基础

江枫思渺然 提交于 2020-03-19 17:19:02
from http://www.kankanews.com/ICkengine/archives/120870.shtml 变量 GLSL的变量命名方式与C语言类似。变量的名称可以使用字母,数字以及下划线,但变量名不能以数字开头,还有变量名不能以gl_作为前缀,这个是GLSL保留的前缀,用于GLSL的内部变量。当然还有一些GLSL保留的名称是不能够作为变量的名称的。 基本类型 除了布尔型,整型,浮点型基本类型外,GLSL还引入了一些在着色器中经常用到的类型作为基本类型。这些基本类型都可以作为结构体内部的类型。如下表: 类型 描述 void 跟C语言的void类似,表示空类型。作为函数的返回类型,表示这个函数不返回值。 bool 布尔类型,可以是true 和false,以及可以产生布尔型的表达式。 int 整型 代表至少包含16位的有符号的整数。可以是十进制的,十六进制的,八进制的。 float 浮点型 bvec2 包含2个布尔成分的向量 bvec3 包含3个布尔成分的向量 bvec4 包含4个布尔成分的向量 ivec2 包含2个整型成分的向量 ivec3 包含3个整型成分的向量 ivec4 包含4个整型成分的向量 mat2 或者 mat2x2 2×2的浮点数矩阵类型 mat3或者mat3x3 3×3的浮点数矩阵类型 mat4x4 4×4的浮点矩阵 mat2x3 2列3行的浮点矩阵

golang的reflection(转)(一)

让人想犯罪 __ 提交于 2020-03-17 02:01:18
某厂面试归来,发现自己落伍了!>>> 反射reflection 可以大大提高程序的灵活性,使得interface{}有更大的发挥余地 反射可以使用TypeOf和ValueOf函数从接口中获取目标对象信息 反射会将匿名字段作为独立字段(匿名字段的本质) 想要利用反射修改对象状态,前提是interface.data是settable,即pointer-interface 通过反射可以“动态”调用方法 常用的类型、函数和方法 // 返回动态类型i的类型,如果i是一个空结构体类型,TypeOf将返回nil func TypeOf(i interface {}) Type // Type 接口类型 type Type interface { Align() int FieldAlign() int // 指定结构体中方法的下标,返回某个方法的对象,需要注意的是返回的Method是一个独立的结构体 Method( int ) Method /* type Method struct { Name string PkgPath string Type Type Func Value Index int } */ MethodByName( string ) (Method, bool ) // 返回该结构体类型的方法下标 NumMethod() int // 返回类型的名称,即动态类型i的名称