结构体

C到C++ 快速过度 C 结构体到类

|▌冷眼眸甩不掉的悲伤 提交于 2020-11-10 08:32:25
<!--结构体--> 还记得C语言中的结构体么? struct Point{ double x; double y; }; 上面的代码是一个“结构体模版”,我们利用它创建了一个叫做Point的类型。 在这之后,我们就可以像声明基本类型的变量一样声明Point类型: Point ob; ob叫做结构体Point的一个“实例”。(更多被称为“对象”,下文中不再区分“实例”和“对象”这两个词。) 而当我们 int n; 的时候,会讲声明了int类型的一个“变量” n。 而当我们Point ob; 的时候,我们一般称“构建了Point的一个对象” ob。 结构体是一种复合类型,但是它和同样身为复合类型的数组不同。 数组是相同类型元素的线性集合,而一个结构体中却能含有不同类型的成员。 <!--数组操作技巧--> // 这是穿插的关于数组常用操作的讲解 和结构体与类并没有多大关系 不感兴趣的可以跳过^_^ char name[20]; 我们这样就声明了一个数组,并且每个name[i](0 <=i < 20)都是一个独立的char类型的变量。它们被称为数组的“元素”。 值得一提的是,同一个数组的各个元素所占用的内存空间是连续的。 这使得我们在遍历(检索)整个数组的时候,速度非常的快: int line[] = {2, 5, 6, 7, 8, 12, -5, -32}; // 1 int len

swift学习之类和结构体

ぃ、小莉子 提交于 2019-12-16 10:53:25
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 类和结构体对比 Swift 中类和结构体有很多共同点。共同处在于: 定义属性用于存储值 定义方法用于提供功能 定义下标操作使得可以通过下标语法来访问实例所包含的值 定义构造器用于生成初始化值 通过扩展以增加默认实现的功能 实现协议已提供某种标准功能 与结构体对比类还有如下的附加功能: 类可以继承 类允许在运行时检查和解释一个类实例 的类型 类的析构器允许个类实例释放任何其所分配的资源 引用计数允许对一个类的多次引用 注意:结构体总是通过被复制的方式在代码中传递,不适用引用计数。这是类和结构体的区别之一 类和结构体都可以使用点语法访问其属性。 注意:与Objective-C不同,Swift允许直接设置结构体的子属性的值。比如在OC中 tableView.frame.origin.x = 200这种写法就会报语法错误,而在Swift中则不会。 结构体都一个自动生成的成员逐一构造器,用于初始化结构体实例中的属性。如: CGRect.init(origin: , size: ) 然而类却不会自动生成。 结构体和 枚举 是值类型的 值类型被赋予一个变量,常量或者当做参数传递给函数的时候,其值会被拷贝。 在 Swift 中,所有的基本类型:整数(Integer)、浮 点数(floating-point)、布尔值

C#语言struct结构体适用场景和注意事项

≡放荡痞女 提交于 2019-12-09 19:26:44
在C#语言中struct结构体和class之间的区别主要是值类型和引用类型的区别,但实际上如果使用不当是非常要命的。从Win32时代过来的人对于struct一点不感觉陌生,但是却反而忽略了一些基本问题。我们知道C#在涉及到本地代码的地方大量使用了struct,很大程度上是为了移植代码的需要。很多时候,感觉结构比较简单的类改为struct可能会提高性能,但这种感觉在绝大多数情况下其实是错误的。那么我们自己在编写代码的时候究竟在什么情况下适合定义struct而不是class呢? 选用struct的原则 通过阅读微软的技术文章 Choosing Between Class and Struct ,可以了解到选择使用struct的一些准则。 考虑 定义struct而非class,如果类型的实例很小而且通常存活期都很短或者一般都嵌入到其它对象中使用 避免 定义struct除非类型满足以下全部特征: 逻辑上表达了一个单一值,类似基本数据类型(int, double) 实例大小低于16字节 不可改变 不会被频繁装箱 个人总结了一些使用场景和注意的地方。 对于初学者或者一般情况,请使用class不要考虑struct。当程序需要考虑性能而进行优化的阶段再考虑struct问题 定义struct时,尽量作为私有类型或内部类型,不要公开 struct的属性不要定义公开的set方法,也就是不可改变

五.Foundation框架(1)--NSSize   NSPoint   NSRange   NSRect 结构体

守給你的承諾、 提交于 2019-12-07 04:30:58
在讲述框架之前,我们可以想象一个问题,那就是为什么我们每次创建文件的时候,都去选择Cocoa Class或者Cocoa Touch Class 尼? Cocoa 是什么? ocoa不是一种编程语言(它可以运行多种编程语言),它也不是一个开发工具(通过命令行我们仍然可以开发Cocoa程序),它是创建Mac OS X和IOS程序的原生面向对象API,为这两者应用提供了编程环境。 我们通常称为“Cocoa框架”,事实上Cocoa本身是一个框架的集合,它包含了众多子框架,其中最重要的要数“Foundation”和“UIKit”。前者是框架的基础,和界面无关,其中包含了大量常用的API;后者是基础的UI类库,以后我们在IOS开发中会经常用到。这两个框架在系统中的位置如下图: 其实所有的Mac OS X和IOS程序都是由大量的对象构成,而这些对象的根对象都是NSObject,NSObject就处在Foundation框架之中 通常我们会将他们分为几类: 值对象 集合 操作系统服务:文件系统、URL、进程通讯 通知 归档和序列化 表达式和条件判断 Objective-C语言服务 常用结构体 在C语言阶段我们已经学过结构了,而为了简化我们的开发,Foundation框架为我们预先创建了很多,在开发中常用的结构体。这样的话,我们就不必要每次创建项目的时候都去创建同样的代码。 1.NSSize

C语言基础-13-结构体

ε祈祈猫儿з 提交于 2019-11-28 14:38:08
C语言的核心部分都说得七七八八了,相信大家已经对C语言的基本数据类型(char\int\float)、数组、指针都很熟悉了,今天来学习C语言中另外一种数据类型:结构体。在iOS开发中,结构体是经常用到的数据类型,使用频率不亚于指针,所以需要重视,不过用法非常简单。 一、 什么是结构体 * 在 第八讲 的时候已经介绍了C语言中的数组,用法跟其他语言差不多。当 一个整体 由多个数据构成时,我们可以用数组来表示这个整体,但是 数组 有个特点: 内部的每一个元素都必须是相同类型的数据。 * 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名、年龄、身高等数据构成,这些数据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型。 * 为此,C语言专门提供了一种构造类型来 解决上述问题 ,这就是 结构体 ,它 允许内部的元素是不同类型 的。 二、结构体的定义 1.定义形式 结构体内部的元素,也就是组成成分,我们一般称为"成员"。 结构体的一般定义形式为: struct 结构体名{ 类型名1 成员名1; 类型名2 成员名2; …… 类型名n 成员名n;    }; struct 是关键字,是结构体类型的标志。 2.举例 比如,我们定义一个学生 struct Student{ char *name; //姓名 int age; // 年龄

关于c语言结构体成员变量访问方式的一点思考

二次信任 提交于 2019-11-28 14:37:55
前言 上篇博文( 关于c语言结构体偏移的一点思考 )对c语言中结构体偏移做了一些思考,发现博文中还有一些小的问题,没有描述的足够清楚,所以才萌生了本篇博文的想法。 为什么不直接将本篇博文作为上篇博文的一个“注”呢?主要有以下方面的原因,一是使用一篇独立的博文能够更好的阐述问题,从而彻底的理解它;二是上篇博文的篇幅已经比较长,考虑到读者的耐心,所以一篇博文不适合过长的篇幅;三是这个问题可以作为一个独立的主题来探讨,方便查阅;最后本着单一职责的原则,每篇博文讨论一个特定的主题,对于主题的粒度大小,可酌情考虑。 那么本篇博文主要探讨什么问题呢?从本文的标题我们可以看到,本文主要探讨的是c语言中关于结构体成员变量的访问方式。访问结构体成员变量?如此简单的问题,有什么可以思考的呢?很纳闷也很奇怪。既然这样,那就带着这个奇怪的问题继续阅读吧。 示例 我们的探讨还是从一个简单的示例开始: 已知结构体类型定义如下: struct node_t { char a; int b; int c; }; 且结构体1Byte对齐: #pragma pack(1) 接下来我们探讨几种访问该结构体成员变量c的方式: 情形1 如果程序中定义了一个struct node_t类型的变量node如下: struct node_t node; 那么我们就可以直接通过下面的方式来访问成员变量c: node.c 情形2

深入理解C语言结构体成员变量内存分配

最后都变了- 提交于 2019-11-27 09:40:06
欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列博客。 1 问题描述 在学习C语言的时候,我们都会频繁的接触到结构体,使用结构体定义新的数据类型,从而更加方便的存储数据。但是在使用结构体的时候,有些问题会经常会困扰我们,如下所示: 第一种结构体定义: struct school{ char address[100]; char name[30]; }; 第二种结构体定义: struct school_other{ char *address; char *name; }; 以上两种结构体的定义有什么区别?我们在使用的时候需要注意什么? 本文将和大家一起来深入的探讨这个问题。 2 分析问题 很多时候对于大家来说,最重要的不是得到问题的答案,而是学会别人是如何分析问题的,这种解决问题的思路对于大家来说才是最重要的,也是最精彩的地方。 C语言中定义的任何一个变量,最终都会从你的内存条上拿走相应的内存空间,如定义了一个int a;那么四个字节的空间就给a这个变量了。既然如此,我们很好奇,上述两种类型的结构体,分别占用了多大的内存空间呢?为了解决这个问题,我们编写了以下的程序: 这个程序应该很简单,相信各位同学都能看懂,首先定义了两个结构体类型struct school和struct school_other