结构体类型

结构体——小结

孤人 提交于 2019-11-28 02:11:25
一,结构体优点如下, (1)可以包含不同数据类型的一个结构体 (2)相同的结构体变量是可以相互赋值的 (3)节省内存空间 注意:结构体声明的时候本身不占用任何内存空间,只有当你用你定义的结构体类型定义结构体变量的时候计算机才会分配内存。 直接内存操作避免了栈空间开辟结构变量空间的需求,节省内存。 (4)效率高 根据反汇编的思想,结构体在栈中是离散的,而数组在栈中是连续的,而访问起来结构体相对快一些,也在一些教材上看到过,说结构体的效率高是拿空间换取时间的,我个人认为,应该是存储和访问方式的不同而使其效率较高。(有更好的说法希望读者朋友们多多指点) 举例: struct data { int num; char name; float score; }; data t1,t2; 一段简单代码 #include " iostream " #include " string " using namespace std; struct data { int num; char name; float score; }; int main() { data t1,t2,t3; // 定义结构体变量 cin >> t1.num >> t1.name >> t1.score; t2 = t1; // 结构体变量之间相互赋值 t3 = t1; data * p; // 结构体指针 p =& t1;

C语言程序设计(十二)

浪子不回头ぞ 提交于 2019-11-27 23:57:50
第十二章 结构体和共用体 当需要表示复杂对象时,仅使用几个基本数据类型显然是不够的 根本的解决方法是允许用户 自定义数据类型 构造数据类型(复合数据类型)允许用户根据实际需要利用已有的基本数据类型来构造自己所需的数据类型 它们是由基本数据类型派生而来的,用于表示链表、树、堆栈等复杂的数据对象 抽象数据类型不再单纯是一组值的集合,还包括作用在值集上的操作的集合 即在构造数据类型的基础上增加了对数据的操作,且类型的表示细节和操作的实现细节是对外不可见的 结构体类型数据存储的优点: 结构紧凑,易于管理 局部数据的相关性强,便于查找 赋值时只针对某个具体的对象,局部的输入错误不会影响全局 结构体:对关系紧密、逻辑相关、具有相同或者不同属性的数据进行处理 共用体:数据成员的情形是互斥的,每一时刻只有一个数据成员起作用 结构体模板的定义格式: struct 结构体名 { 数据类型 成员1的名字; 数据类型 成员2的名字; …… 数据类型 成员n的名字; }; 结构体的名字,称为结构体标签 构成结构体的变量,称为结构体成员 结构体模板只是声明了一种数据类型,定义了数据的组织形式,并未声明结构体类型的变量 typedef定义数据类型: typedef用于为系统固有的或程序员自定义的数据类型定义一个别名 typedef int INTEGER; typedef struct student

struct&Method

丶灬走出姿态 提交于 2019-11-27 22:30:10
Go通过类型别名和结构体的形式支持用户自定义类型。 结构体是复合类型。通过new来创建 组成结构体类型的数据称为字段。 type identifier struct { field1 type1 field2 type2 ... } 在结构体的指针和结构体引用中,调用结构体内的字段都使用选择器(.)就是这个点。。。。叫结构体。。。 混合字面量语法new一个结构体对象 &struct{a,b,c}底层用的还是new() new(Type)和&Type{}是等价的。 初始化方法 intr := Interval{0, 3} (A) intr := Interval{end:5, start:1} (B) intr := Interval{end:5} (C) Go 语言中,结构体和它所包含的数据在内存中是以连续块的形式存在的,即使结构体中嵌套有其他的结构体 给结构体的字段添加标签: type Num struct { a int "I am a" b int "I am b" c int "I am c" } 匿名字段: 只有类型没有字段名(此时类型就是字段名) type Num struct { a int "I am a" b int "I am b" c int "I am c" int "I ma int" } 内嵌结构体 结构体也是一种数据类型

计算结构体的大小

有些话、适合烂在心里 提交于 2019-11-27 22:04:21
计算结构体的大小: 结构体中可以定义的数据类型: 1.基本类型 2.上面已经出现过的数据类型,比如说上面已经定义过的结构体 3.指向自己的指针 因为内存对齐的问题,各个数据类型放的位置不同就会导致结构体的大小不一样,那么到底 怎样计算一个结构体的大小呢? 先介绍一个概念——偏移量,结构体中的偏移量就是结构体成员和结构体变量的地址之差, 比如说第一个结构体成员的偏移量就是0,第二个结构成员的偏移量就是第一个结构体成员 的大小,假如第一个成员的是int b;那么第二个结构体成员变量的偏移量就是4, 计算结构体大小的规则: 1.每一个成员的偏移量都必须是该成员的倍数。 2.结构体的大小必须是该结构体字节数最大成员的倍数。 例如下面的结构体:例一: struct A { char a; short b; int c; }; 第一个成员的偏移量都是0;一般可以不看,a的大小为1,所以成员b的偏移量为1,b的大小 为2,1不是2的倍数,所以应该将1+1,成为2的倍数,成员c的偏移量就为1+1+2,是成员c的 倍数,现在就符合计算结构体大小的第一条:改成员的偏移量是该成员大小 的倍数,还有第二条规则:结构体大小是结构体最大成员的倍数,结构体的大小就是各个成员 之和,a;2,b:2,c:4加起来就是8,该结构最大成员为c大小为4,满足第二个条件,所以该结 构体的倍数就是8 代码: #include

结构体的使用

泪湿孤枕 提交于 2019-11-27 19:09:14
基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。 结构体定义: 第一种 :只有结构体定义 struct stuff{ char job[20]; int age; float height; }; 第二种 :附加该结构体类型的“结构体变量”的初始化的结构体定义 //直接带变量名Huqinwei struct stuff{ char job[20]; int age; float height; }Huqinwei; 也许初期看不习惯容易困惑,其实这就相当于: struct stuff{ char job[20]; int age; float height; }; struct stuff Huqinwei; 第三种: 如果该结构体你只用一个变量Huqinwei,而不再需要用 struct stuff yourname; 去定义第二个变量。 那么,附加变量初始化的结构体定义还可进一步简化出 第三种 : 把结构体名称去掉,用匿名结构体直接定义一个结构体对象(习惯用对象这词了),这样更简洁,不过也不能定义其他同结构体变量了——除非用typeof。 struct{ char job[20]; int age; float height; }Huqinwei;

go语言基础

拈花ヽ惹草 提交于 2019-11-27 19:03:09
GO语言 优点: 编译速度快 运行效率直逼C语言 简单 并发牛逼到没有朋 /* Docker Codis Glow 类似于Hadoop Cockroach(蟑螂) */ package main import "fmt" func main() //入口函数 { fmt.Println("Hello World") } golang语言特性 1.垃圾回收 a 内存自动回收,再也不需要开发人员管理内存 b 开发人员专注业务实现,降低了心智负担 c 只需要new分配内存,不需要释放 2.天然并发特性 a 从语言层面支持并发,非常简单 b goroute 轻量级线程,创建成千上万个goroute成为可能 c 基于CSP(通信序列进程)模型实现 3. channel(管道) a 管道,类似于unix/Linux中的pipe b 多个goroute之间通过channel进行通信 c 支持任何类型 package main import "fmt" func main() { pipe := make(chan int,3) //make 作用类似于new关键字 pipe <- 1 pipe <- 2 pipe <- 3 fmt.Println(len(pipe)) } 4.多返回值 a 一个函数返回多个值 package main import "fmt" func calc(a int,b

结构体

☆樱花仙子☆ 提交于 2019-11-27 18:57:01
定义:C/C++ 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构,但结构体(structure)是一种用户定义的数据类型,允许你将不同类型的数据项放在一起。 struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; struct Books Book1; Book1.book_id = 6495407; 结构体指针 struct Books *struct_pointer; 为了通过一个指向结构的指针访问结构体成员,必须使用 -> 操作符,struct_pointer->title; 来源: https://www.cnblogs.com/rise0111/p/11373248.html

sizeof()计算结构体的大小

江枫思渺然 提交于 2019-11-27 16:52:22
简要说明:结构体成员按照定义时的顺序依次存储在连续的内存空间,但是结构体的大小并不是简单的把所有成员大小相加,而是遵循一定的规则,需要考虑到系统在存储结构体变量时的地址对齐问题。 一、没有成员的结构体占用的空间是多少个字节? 答案是:1个字节。 这就是实例化的原因(空类同样可以被实例化),每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类或空结构体(C++中结构体也可看为类)隐含的加一个字节,这样空类或空结构体在实例化后在内存得到了独一无二的地址,所以空类所占的内存大小是1个字节。 二、首先介绍一个相关的概念——偏移量 struct stru { int a; //start address is 0 char b; //start address is 4 int c; //start address is 8 }; 偏移量指的是结构体变量中成员的地址和结构体变量地址的差。结构体大小等于最后一个成员的偏移量加上最后一个成员的大小。显然,结构体变量中第一个成员的地址就是结构体变量的首地址。比如上面的结构体,第一个成员a的偏移量为0。第二个成员b的偏移量是第一个成员的偏移量加上第一个成员的大小(0+4),其值为4;第三个成员c的偏移量是第二个成员的偏移量应该是加上第二个成员的大小(4+1)。 三、在实际中,存储变量时地址要求对齐

sizeof()用法汇总

筅森魡賤 提交于 2019-11-27 13:52:26
sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。 2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。 注意 :int *p; sizeof(p)=4; 但sizeof(*p)相当于sizeof(int); 对于静态数组,sizeof可直接计算数组大小; 例:int a[10];char b[]="hello"; sizeof(a)等于4*10=40; sizeof(b)等于6; 注意 :数组做型参时,数组名称当作指针使用!! void fun(char p[]) {sizeof(p)等于4} 经典问题: double* (*a)[3][6]; cout<<sizeof(a)<<endl; // 4 a为指针 cout<<sizeof(*a)<<endl; // 72 *a为一个有3*6个指针元素的数组 cout<<sizeof(**a)<<endl; // 24 **a为数组一维的6个指针 cout<<sizeof(***a)<<endl; // 4 ***a为一维的第一个指针 cout<<sizeof(****a)<<endl

sizeof()

妖精的绣舞 提交于 2019-11-27 13:50:47
这是初学者问得最多的一个问题,所以这里有必要多费点笔墨。让我们先看一个结构体: struct S1 { char c; int i; }; 问sizeof(s1)等于多少聪明的你开始思考了,char占1个字节,int占4个字节,那么加起来就应该是5。是这样吗你在你机器上试过了吗也许你是对的,但很可能你是错的!VC6中按默认设置得到的结果为8。 Why为什么受伤的总是我 请不要沮丧,我们来好好琢磨一下sizeof的定义——sizeof的结果等于对象或者类型所占的内存字节数,好吧,那就让我们来看看S1的内存分配情况: S1 s1 = { 'a', 0xFFFFFFFF }; 定义上面的变量后,加上断点,运行程序,观察s1所在的内存,你发现了什么 以我的VC6.0为例,s1的地址为0x0012FF78,其数据内容如下: 0012FF78: 61 CC CC CC FF FF FF FF 发现了什么怎么中间夹杂了3个字节的CC看看MSDN上的说明: When applied to a structure type or variable, sizeof returns the actual size, which may include padding bytes inserted for alignment. 原来如此,这就是传说中的字节对齐啊!一个重要的话题出现了。