结构体类型

C#结构体比较

雨燕双飞 提交于 2020-01-25 02:06:44
C#结构体是值类型,方法中传参时是值的拷贝; 结构体定义: enum PointPosition { TopLeft, TopMiddle, TopRight } struct EdgePoint { public int left{get;set;} public int top{get;set;} public PointPosition position{get;set;} public static EdgePoint Empty { get{ return new EdgePoint(); } } } //枚举转换 bool b = Enum.IsDefined(typeof(PointPosition),"TopLeft"); PointPosition p = (PointPosition)Enum.Parse(typeof(PointPosition),"TopLeft"); //true Console.WriteLine(b); b = Enum.IsDefined(typeof(PointPosition),"TopMiddle"); //true Console.WriteLine(b); b = Enum.IsDefined(typeof(PointPosition),"BottomLeft"); //false Console.WriteLine(b);

redis源码阅读——动态字符串sds

流过昼夜 提交于 2020-01-24 13:13:42
redis中动态字符串sds相关的文件为:sds.h与sds.c 一、数据结构 redis中定义了自己的数据类型"sds",用于描述 char*,与一些数据结构 1 typedef char *sds; 2 3 /* Note: sdshdr5 is never used, we just access the flags byte directly. 4 * However is here to document the layout of type 5 SDS strings. */ 5 struct __attribute__ ((__packed__)) sdshdr5 { 6 unsigned char flags; /* 3 lsb of type, and 5 msb of string length */ 7 char buf[]; 8 }; 9 struct __attribute__ ((__packed__)) sdshdr8 { 10 uint8_t len; /* used */ 11 uint8_t alloc; /* excluding the header and null terminator */ 12 unsigned char flags; /* 3 lsb of type, 5 unused bits */ 13 char buf[];

Nginx Http框架的理解

≡放荡痞女 提交于 2020-01-23 14:28:49
HTTP框架是Nginx基础框架的一部分,Nginx的其它底层框架如master-worker进程模型、event模块、mail 模块等。 HTTP框架代码主要有2个模块组成:ngx_http_module和ngx_http_core_module; 我们编写的HTTP模块需要注册到HTTP框架上,才能融入HTTP请求的处理流程中。 当在nginx.conf中存在一个http{...}的配置时,即启用了HTTP框架代码,在nginx配置解析时,就已经为框架建立好了各种数据结构(尤其是HTTP模块的挂载); 当nginx收到请求时,请求完全按照HTTP框架建立好的这种逻辑进行处理。 一、HTTP模块开发基础 开发一个HTTP模块,需要下面几个数据结构: 1. HTTP模块配置结构 用于存储从配置文件读进来的相关指令参数; 配置模块的context有三种,分别是main、server和location,它们分别位于于http{...}、server{...}和location{...}上下文中。 其名称约定如下: ngx_http_<module name>_(main|srv|loc)_conf_t 2.HTTP 模块配置指令 模块的指令是定义在一个叫做 ngx_command_t 的静态数组中的; ngx_command_t数组以ngx_null_command为终结符。

大一寒假培训:结构体

痴心易碎 提交于 2020-01-22 23:24:54
一、结构体的定义与使用: 1.定义 在主函数内也可以在主函数外定义,下面是习惯用法: struct student //定义一个叫做“student”的结构体; { //以下是其中各种元素; char name [ 22 ] ; char xuehao ; int age ; double mark ; } p [ 1001 ] ; //给该结构体一个别名“p”,便于使用,且定义为一个结构体数组; 也可以这样: # include <bits/stdc++.h> using namespace std ; struct student { char name [ 22 ] ; char xuehao ; int age ; double mark ; } ; //此处不写; int main ( ) { struct student p [ 1001 ] ; //在主函数内进行声明,效果相同; return 0 ; } 2.使用 *先补充一点sort函数的使用基础: *再补充一点关于 正则表达式“%[^\n]” :可用于需要输入带有空格的字符型数组(如英文名),这个表达式用于输入语句,如: scanf ( "%[^\n]" , & stu [ i ] . name ) ; //意为输入直到键入回车(也就是\n)时停止输入; 还有一点很重要,不能在结构体声明中初始化结构体成员

接口服务数据格式技巧

做~自己de王妃 提交于 2020-01-22 07:59:17
需求背景 在同其他应用交互的过程中,我们常常需要提供以接口的方式,暴露应用数据或功能。在提供数据这块内容中,常常是需要约定双方的各自的数据格式要求,以满足通讯的需要 现在大部分的数据格式为json格式,在go语言中,json也得到了很好的支持,可以很方便的将结构体转换为json数据 在这篇文章中,我简要地演示下针对特定的数据格式,我们在go语言中如何去设计相关的结构体,从而方便我们的编程,更清晰地写出较强逻辑性的代码 演示 数据要求 假设我们需要提供的数据格式内容如下: [ { "name" : "offline" , "servity" : [ { "level" : "3级" , "count" : 0 } , { "level" : "4级" , "count" : 0 } , { "level" : "5级" , "count" : 4 } ] } , { "name" : "SQL" , "servity" : [ { "level" : "3级" , "count" : 0 } , { "level" : "4级" , "count" : 0 } , { "level" : "5级" , "count" : 4 } ] } , ... ] 数据格式分析 分析这个数据格式,这是一个列表,里面包含了多个元素,每个元素为map类型,在键值为“servity”中

RunTime之类与对象

五迷三道 提交于 2020-01-21 22:24:24
1.Block定义 可以用一句话来表示Block: 带有自动变量(局部变量) 的 匿名函数 。 在iOS中使用“^”来声明一个Block。Block的内容是包含在“{}”中的,并且和C语言一样用“;”来表示语句的结束,标准语法如下所示: //完整语法 ^ 返回值类型 参数列表 表达式 //省略返回值 ^ 参数列表 表达式 //省略参数列表 ^ 返回值类型 表达式 //省略返回值和参数列表 ^ 表达式 从上面可以看到,Block和函数很相似,具体体现在这些方面: 可以保存代码(对应表达式); 有返回值(对应返回值类型); 有形参(对应参数列表); 调用方式一样。 我们通常使用如下形式将Block赋值给Block类型变量,示例代码如下: int multiplier = 7; int (^myBlock)(int) = ^(int num){ return multiplier * num; }; NSLog(@"%d",myBlock(3)); 采用这种方式在函数参数或返回值中使用Block类型变量时,记述方式极为复杂。这时,我们可以使用typedef来解决该问题。 示例1:没有使用typedef - (void)loadDataFromUrl:(void(^)(NSString *))retData { } 示例2:使用typedef typedef void(

Block那些不得不说的故事

时光毁灭记忆、已成空白 提交于 2020-01-21 22:19:32
Blocks是带有自动变量(局部变量)的匿名函数,能够捕获它所在函数内部的变量。实质是OC对闭包的对象实现,是一种特殊的数据类型,其可以作为变量被定义、可以作为参数、可以作为返回值,block的声明与赋值只是保存了一段代码段,在调用时执行内部的代码。block的设计思想是可以将有意义的代码片段组群成一个区块(block),而非转成分散且特定命名的程序。区块可以有区块外部无法通过名称访问,属于 区块本身的变量 、程序以及函数。 官方解释: Block对象是C级语法和运行时功能。 它们类似于标准C函数,但除了可执行代码之外,它们还可能包含对自动(堆栈)或托管(堆)内存的变量绑定。 因此,块可以维护一组状态(数据),它可以用于在执行时影响行为。您可以使用块来组合可以传递给API的函数表达式,可选地存储并由多个线程使用。 块作为回调特别有用,因为块包含要在回调时执行的代码和执行期间所需的数据。 一.Block的模式和实质 Obejctive-C中,Block实际有自己的isa指针,它是被当做一个对象处理的,调用的时候也是给这个block发送了一个消息。block在OC中的实现如下: struct Block_layout { void *isa; int flags; int reserved; void (*invoke)(void *, ...); //函数指针

结构体基础知识点(七)--用 typedef 声明新类型名

荒凉一梦 提交于 2020-01-21 09:17:43
前期回顾    结构体基础知识点(一)–建立自己的数据类型    结构体基础知识点(二)–使用结构体数组    结构体基础知识点(三)–结构体指针    结构体基础知识点(四)–用指针处理链表    结构体基础知识点(五)–共用体类型    结构体基础知识点(六)–使用枚举类型 用 typedef 声明新类型名 1. 用一个新类型名代替原有的类型名 这样有个好处,可以提高可移植性。 typedef int Integer ; //指定用 Integer 作为类型名,所用与int相同 typedef float Real ; //指定用 Real 作为类型名,所用与float相同 2. 命名一个简单的类型名代替复杂的类型表示方法   C程序中除了简单类型名(int、char等),还有许多看起来复杂的类型名(结构体类型、共用体类型、指针类型等),C允许程序设计者用一个简单的名字代替复杂的名字。 1) 命名一个新的类型名代表结构体类型 typedef struct { int month ; int day ; } Date ; Date today ; //定义结构体类型变量 Date * p ; //定义结构体指针变量 p,指向此结构体类型数据 2) 命名一个新的类型名代表数组类型 typedef int Num [ 100 ] ; //声明 Num为整形数组类型名 Num a ;

Android Protect-0.Apk文件结构简介

佐手、 提交于 2020-01-21 01:21:07
文章目录 1. APK 文件结构 2. APK 文件的生成流程 3. classes.dex 3.1 DEX 文件结构 3.1.1 LEB128 3.1.2 DexHeader 3.1.3 DexMapList 3.1.4 DexStringld 3.1.5 DexTypeld 3.1.6 DexProtoId 3.1.7 DexFieldld (标识了类成员) 3.1.8 DexMethodld 3.1.9 DexClassDef 3.2 DEX 文件的验证与优化过程 3.3 DEX 文件的修改 4. AndroidManifest.xml(AXML 文件格式) 4.1 Header 4.2 String Chunk 4.3 ResourceId Chunk 4.4 XmlContent Chunk 4.5 AXML 文件的修改 5.resources.arsc 5.1 ARSC 文件格式 5.1 Header、 String Chunk 5.2 ResTable_package 5.3 TypeStrings、KeyStrings 5.4 ResTable_typeSpec、ResTable_type 6. META-INF 目录 6.1 CERT.RSA 6.2 MANIFEST.MF 6.3 CERT.SF window 中可以配合 Cygwin 查看。 1. APK

C语言内存对齐和结构补齐

我只是一个虾纸丫 提交于 2020-01-21 00:15:25
首先我们先看看下面的C语言的结构体: [cpp] view plain copy typedef struct MemAlign { int a; char b[3]; int c; }MemAlign; 以上这个结构体占用内存多少空间呢?也许你会说,这个简单,计算每个类型的大小,将它们相加就行了,以32为平台为例,int类型占4字节,char占用1字节,所以:4 + 3 + 4 = 11,那么这个结构体一共占用11字节空间。好吧,那么我们就用实践来证明是否正确,我们用sizeof运算符来求出这个结构体占用内存空间大小,sizeof(MemAlign),出乎意料的是,结果居然为12?看来我们错了?当然不是,而是这个结构体被优化了,这个优化有个另外一个名字叫“对齐”,那么这个对齐到底做了什么样的优化呢,听我慢慢解释,再解释之前我们先看一个图,图如下: 相信学过汇编的朋友都很熟悉这张图,这张图就是CPU与内存如何进行数据交换的模型,其中,左边蓝色的方框是CPU,右边绿色的方框是内存,内存上面的0~3是内存地址。这里我们这张图是以32位CPU作为代表,我们都知道,32位CPU是以双字(DWORD)为单位进行数据传输的,也正因为这点,造成了另外一个问题,那么这个问题是什么呢?这个问题就是,既然32位CPU以双字进行数据传输,那么,如果我们的数据只有8位或16位数据的时候