结构体类型

[Golang] 关于Sync.Map的使用

风流意气都作罢 提交于 2019-12-04 23:49:49
转自 https://blog.csdn.net/sc_lilei/article/details/81390185 简介: sync.Map这个数据结构是线程安全的(基本类型Map结构体在并发读写时会panic严重错误),它填补了Map线程不安全的缺陷,不过最好只在需要的情况下使用。它一般用于并发模型中对同一类map结构体的读写,或其他适用于sync.Map的情况。 关于sync.Map的源码解析文章: Go 1.9 sync.Map揭秘 正文: 它主要五个方法及其功能简介: 1、Store 存 key,value 2、LoadOrStore 取&存-具体看代码 3、Load 取key对应的value 4、Range 遍历所有的key,value 5、Delete 删除key,及其value package main import ( "fmt" "sync" ) func main() { var m sync.Map //Store m.Store(1,"a") m.Store(2,"b") //LoadOrStore //若key不存在,则存入key和value,返回false和输入的value v,ok := m.LoadOrStore("1","aaa") fmt.Println(ok,v) //false aaa //若key已存在

Java与C++Socket通讯注意

醉酒当歌 提交于 2019-12-04 22:14:56
c++与java进行socket通信时注意事项 因为java发送的都是网络字节序(big-endium),而c++是主机字节序(little-endium),所以当消息中有整型,浮点型(应尽量避免使用)的时候需要用htonl,htons,ntohl,ntohs等函数转换一下,字符串由于是单字节排序的不需要转换,但应注意c++字符串是以'/0'作为结束符的,如果找不到'/0'可能会出现一些乱码,所以接收的时候可以分配一个length+1的buffer用来接收消息. 举例:c++ server, java client,假设开发的是c++ server,那么: java client--------->c++ server: c++ server需要调用ntohs,ntohl c++ server--------->java client: c++ server需要调用htons,htonl 至于浮点型可以使用以下的函数转换: float tcp_htonf(float f) { unsigned char *p, p0, p1; if(htons(1) ==1) return f; p =(unsigned char *)&f; p0 =p[0]; p1 =p[1]; p[0] =p[3]; p[3] =p0; p[1] =p[2]; p[2] =p1; return f; }

C语言结构体用法

半城伤御伤魂 提交于 2019-12-04 22:01:48
结构体(struct) 结构体是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。 结构体中可以使用不同的数据类型。 1. 结构体说明和结构体变量定义 在Turbo C中, 结构体也是一种数据类型, 可以使用结构体变量, 因此, 像其它类型的变量一样, 在使用结构体变量时要先对其定义。  定义结构体变量的一般格式为: struct 结构体名 { 类型 变量名; 类型 变量名; ... } 结构体变量; 结构体名是结构体的标识符不是变量名。 构成结构体的每一个类型变量称为结构体成员, 它象数组的元素一样, 但数组中元素是以下标来访问的, 而结构体是按变量名字来访问成员的。 下面举一个例子来说明怎样定义结构体变量。 struct string { char name[8]; int age; char sex[2]; char depart[20]; float wage1, wage2, wage3, wage4, wage5; } person; 这个例子定义了一个结构体名为string的结构体变量person, 如果省略变量名 person, 则变成对结构体的说明。用已说明的结构体名也可定义结构体变量。这样定义时上例变成: struct string { char name[8]; int age; char sex[2]; char depart[20]; float

go语言学习笔记(二)

我是研究僧i 提交于 2019-12-04 20:38:56
整数 有符号整数 int8 int16 int32 int64 无符号整数 uin8 uin16 uin32 uin64 无符号整数 uintptr 可以进行运算这点很重要请了解 unsafe 包,大小不明确,足以完整存放指针, uinptr 只用于底层编程。 rune 类型是 int32 的同义词,常常用于指明一个值是 unicode 码点。 a:=" 这是 golang" for i:=0;i< len(a);i++ { fmt.Println(a[i]) } 输出: 232 191 153 230 152 175 103 111 108 97 110 103 这是按 utf8 码点输出的 但是如果将 a 变为 rune 类型 package main import "fmt" func main(){ a:=[]rune(" 这是 golang") for i:=0;i< len(a);i++ { fmt.Println(a[i]) } } 输出: 36825 26159 103 111 108 97 110 103 按照 unicode 码点序列输出 常量 在编译阶段就计算出表达式的值,意义在程序运行过程中防止恶意篡改。 声明常量使用关键字 const 如: const e = 1234141241 (也可以指定类型当然何必多此一举?) 常量声明不需要写 type

sizeof

断了今生、忘了曾经 提交于 2019-12-04 18:45:21
本文转载百度百科。 编辑本段 用法   var a : array[1..10000] of longint;    Begin   Writeln(SizeOf(a));   End.   输出:40000   如果定义Integer,则输出:20000    c语言 中判断数据类型长度符   用法   sizeof(类型说明符, 数组 名或表达式);   或   sizeof 变量名   1. 定义:   sizeof是C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数。   MSDN上的解释为:   The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.   其返回值类型为size_t,在头文件 stddef.h 中定义。这是一个依赖于编译系统的值,一般定义为   typedef unsigned int size_t;   世上 编译器 林林总总,但作为一个规范,它们都会保证char、signed char和unsigned  

位域结构体简介

余生颓废 提交于 2019-12-04 16:44:01
最近实习接触到一个新的知识点,C/C++的位域结构体。 以下开始摘抄自: here 位段(bit-field)是以位为单位来定义结构体(或联合体)中的成员变量所占的空间。含有位段的结构体(联合体)称为位段结构。采用位段结构既能够节省空间,又方便于操作。 位段的定义格式为: 1 type [var]: digits 其中type只能为int,unsigned int,signed int三种类型(int型能不能表示负数视编译器而定,比如VC中int就默认是signed int,能够表示负数)。位段名称var是可选参数,即可以省略。digits表示该位段所占的二进制位数。 举个例子,你可以这样定义一个位域结构体: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // sizeof(A): 4 struct A { uint32_t a: 12; uint32_t b: 10; uint32_t c: 10; }; // sizeof(B): 12 struct B { uint32_t a; uint32_t b; uint32_t c; }; uint32_t 实际上是 unsigned int 的别名,并且指定了用4个字节存储int类型的数据,而 1byte = 8bits, 4个字节共计32bits,结构体A使用了位域的方式,指定了每个成员所占用的bit数

go-面向对象编程(下)

别说谁变了你拦得住时间么 提交于 2019-12-04 16:42:04
面向对象编程思想-抽象 抽象的介绍 我们在前面去定义一个结构体时候,实际上就是把一类事物的共有的 属性( 字段)和 行为( 方法)提取 出来,形成一个 物理模型(结构体)。这种研究问题的方法称为抽象 比如一个银行账户: package main import ( "fmt" ) //定义一个结构体Account type Account struct { AccountNo string Pwd string Balance float64 } //方法 //1. 存款 func (account *Account) Deposite(money float64, pwd string) { //看下输入的密码是否正确 if pwd != account.Pwd { fmt.Println("你输入的密码不正确") return } //看看存款金额是否正确 if money <= 0 { fmt.Println("你输入的金额不正确") return } account.Balance += money fmt.Println("存款成功~~") } //取款 func (account *Account) WithDraw(money float64, pwd string) { //看下输入的密码是否正确 if pwd != account.Pwd { fmt.Println

类与对象(上) C++

感情迁移 提交于 2019-12-04 14:48:36
深夜发博,最深的感触就是,曾经欠的债,是要用头发来还的…… 关于C++大致分为以下几个小部分: 1.类与对象的初步认知: C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 2.类的引入: C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。结构体的定义,在C++中更喜欢用class来代替 ,然后将这种把函数与变量等绑定在一个结构体中,这个结构体称为类。 struct Student1 { void SetStudentInfo(const char* name, const char* gender, int age) { strcpy(_name, name); strcpy(_gender, gender); _age = age; } void PrintStudent() { cout << _name << " " << _gender << " " << _age << endl; } char _name[20]; char _gender[10]; int _age; }; class Student2 { public: void SetStudentInfo(const char* name, const

《Java虚拟机原理图解》6、 class文件中的方法表集合--method方法在class文件中是怎样组织的

我是研究僧i 提交于 2019-12-04 13:31:21
0. 前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路。但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述,很难给人以形象化的认知,看完之后感觉还是稀里糊涂的。 感于以上的种种,我打算把我在学习JVM虚拟机的过程中学到的东西,结合自己的理解,总结成《Java虚拟机原理图解》 这个系列,以图解的形式,将抽象的JVM虚拟机的知识具体化,希望能够对想了解Java虚拟机原理的的Java程序员 提供点帮助。 读完本文,你将会学到: 1、类中定义的method方法是如何在class文件中组织的 2、method方法的表示-方法表集合在class文件的什么位置 3、 类中的method方法的实现代码---即机器码指令存放到哪了,并初步了解机器指令 4. 为什么没有在类中定义自己的构造函数,却可以使用new ClassName()构造函数创建对象 5. IDE代码提示功能的基本原理 1.概述 方法表集合 是指由若干个 方法表 (method_info) 组成的集合。对于在类中定义的若干个,经过 JVM 编译成 class 文件后,会将相应的 method 方法信息组织到一个叫做 方法表集合 的结构中, 字段表集合 是一个类数组结构,如下图所示: 2. method方法的描述

《Java虚拟机原理图解》 2、Class文件中的常量池详解(上)--转载

安稳与你 提交于 2019-12-04 13:30:56
[last updated:2014/11/27] NO1. 常量池在class文件的什么位置? 我的上一篇文章 《Java虚拟机原理图解》 1、class文件基本组织结构 中已经提到了class的文件结构,在class文件中的魔数、副版本号、主版本之后,紧接着就是常量池的数据区域了,如下图用红线包括的位置: 知道了常量池的位置后,然后让我们来揭秘常量池里究竟有什么东西吧~ NO2. 常量池的里面是怎么组织的? 常量池的组织很简单,前端的两个字节占有的位置叫做 常量池计数器 ( constant_pool_count ),它记录着常量池的组成元素 常量池项( cp_info ) 的个数。紧接着会排列着 constant_pool_count-1 个 常量池项( cp_info ) 。如下图所示: NO3. 常量池项 (cp_info) 的结构是什么? 每个 常量池项( cp_info ) 都会对应记录着class文件中的某中类型的字面量。让我们先来了解一下 常量池项( cp_info ) 的结构吧: JVM虚拟机规定了不同的tag值和不同类型的字面量对应关系如下: 所以根据cp_info中的tag 不同的值,可以将cp_info 更细化为以下结构体: CONSTANT_Utf8_info,CONSTANT_Integer_info,CONSTANT_Float_info