第10课 struct 和 union 分析】的更多相关文章

1. struct的小秘密 (1)C语言中的struct可以看作变量的集合 (2)struct的问题——空结构体占用多的内存? [实例分析]空结构体的大小 #include <stdio.h> struct TS { }; int main() { struct TS t1; struct TS t2; //VC.BCC下定义空结构体编译器直接报错,gcc下空结构体大小为0 printf("sizeof(struct TS) = %d\n", sizeof(struct T…
struct的小秘密:空结构体占多大内存呢? 直观的答案有两种: 1.空结构体的大小为0 2.结构体本来就是为了将不同的变量集合在一起使用的,定义空结构体会导致编译错误 实例分析: #include <stdio.h> struct TS { }; int main() { struct TS t1; struct TS t2; printf("sizeof(struct TS) = %d\n", sizeof(struct TS)); printf("sizeo…
struct的小秘密: C语言中的struct可以看作变量的集合 struct的问题:空结构体占用多大内存呢? 程序实例1: #include <stdio.h> struct TS { }; int main() { struct TS t1; struct TS t2; printf("sizeof(struct TS) = %d\n", sizeof(struct TS)); printf("sizeof(t1) = %d, &t1 = %p\n&q…
1.#include <stdio.h>#include <malloc.h>typedef struct _soft_array{    int len;    int array[];}SoftArray;int main(){      int i = 0;    SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int) * 10);        sa->len = 10;        fo…
这几天看<代码大全>中的第十三章---不常见的数据类型,里面讲解到了C语言中的struct以及对指针的解释,联想到以前看过相关的关于C语言中stuct长度的文章,只是现在有些淡忘了,因此今天把保存的资料重新拿出来温习一遍,同时写下这篇文章,对以前相关资料总结的同时顺便梳理一下已有的知识. 一.基本数据类型在内存中的长度 关于基本的数据类型,在不同的机器上占据的长度不一样.为了能够对数据的组合类型(这里只包括了struct和union)能够有一个清晰地认识,这里首先对基本的数据类型在不同位数(3…
struct的小秘密 C语言中的struct可以看做变量的集合,struct的问题: 空结构体占用多大内存? 例子1:空结构体的大小 #include<stdio.h> struct ST { }; int main() { printf("sizeof(struct ST) = %d\n",sizeof(struct ST)); return 0; } 这是C语言的灰色地带,各种解释没有谁对谁错. 结构体与柔性数组 柔性数组是大小待定的数组 C语言中可以由结构体产生柔性数…
第11课 - enum, sizeof, typedef 分析 1. enum介绍 (1)enum是C语言中的一种自定义类型,和struct.union地位相同,格式如下: // enum每个值的最后以逗号结尾 enum Color { GREEN, RED, BLUE }; // printf("%zu\n", sizeof(enum Color)); ==> 输出的结果为4,表明enum类型的变量占用4字节 (2)enum定义的第一个值默认情况下为0,后一个的值在前一个值的基…
来源: http://zhidao.baidu.com/link?url=qxzkx5gaoCfnHnygYdzaLEWkC45JqNYYUk42eHHjB0yB3ZMgHv6lGjnq3CRfgQw8uJVesKck7ao7zT1HAQrWoa   http://zhidao.baidu.com/link?url=zgu7JtWBqJlUzNjrrWDZew4Cx3jMfnxkV1sqgBWDq6_Fcz2t1csh8nausPMz3YoL8gN76dI0hdSE8oEdnQDJ6_ 写作原由…
写在前面的话 软件工程课结束了,大家开心吗?是不是再也不用熬夜写代码了?如果这门课你真的熬夜写代码了,相信你一定有收获,如果这门课结束了你觉得是自己一个全新的开始,那么这门课的意义就实现了.团队作业全部完成了,恭喜所有团队都又一次完成了冲刺,而且效果都比alpha阶段要从容得多.团队作业10也是分成了两部分,一部分是beta事后诸葛亮,一部分是团队复审.由于大家给的个人贡献分基本上都是平均分配,所以助教们将个人贡献分映射到了1-5这样一个得分区间. 题目 团队作业10--项目复审与事后分析(Be…
转载地址:http://blog.csdn.net/firefly_2002/article/details/7954458 一.Struct 和 Union有下列区别: 1.在存储多个成员信息时,编译器会自动给struct第个成员分配存储空间,struct 可以存储多个成员信息,而Union每个成员会用同一个存储空间,只能存储最后一个成员的信息. 2.都是由多个不同的数据类型成员组成,但在任何同一时刻,Union只存放了一个被先选中的成员,而结构体的所有成员都存在. 3.对于Union的不同成…
第9课 - const和volatile分析 1. const只读变量 (1)const修饰的变量是只读的,本质上还是变量,并不是真正意义上的常量         ※※ const只是告诉编译器该变量不能出现在赋值符号的左边 (2)const修饰的局部变量在栈上分配空间:const修饰的全局变量在全局数据区分配空间 (3)const只在编译期间有用(检查const修饰的变量有没有出现在赋值符号左边,如果有就会编译报错),在运行期间无用 #include <stdio.h> int main()…
原文链接:http://www.cnblogs.com/Miranda-lym/p/5197805.html struct/class/union内存对齐原则有四个: 1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节, 则要从4的整数倍地址开始存储),基本类型不包括stru…
写在前面的话 转眼轰轰烈烈本学期的软工实践就结束了,这个过程中想必在熬夜敲代码,激烈讨论中留下诸多回忆的同时,也收获了不少.恭喜所有团队完成了本阶段冲刺,此外,由于大家的贡献分给的都很平均,将个人贡献分放大级差,映射到了1-5这样一个得分区间.60分一下的同学不及格,不幸不及格的同学也莫灰心,将会有一个补救作业,完成达标可以获得及格成绩. 题目 团队作业10--项目复审与事后分析(Beta版本)(http://www.cnblogs.com/happyzm/p/6936126.html) 团队作…
<一出好戏>讲述人性,使用Python抓取猫眼近10万条评论并分析,一起揭秘“这出好戏”到底如何? 黄渤首次导演的电影<一出好戏>自8月10日在全国上映,至今已有10天,其主演阵容强大,相信许多观众也都是冲着明星们去的.目前<一出好戏>在猫眼上已经获得近60万个评价,评分为8.2分,票房已破10亿. 我们将使用Python抓取猫眼近10万条评论数据,并对获取到的数据进行分析,看看观众对这部电影的评价究竟如何? 整个数据分析的过程分为四步: 获取数据 处理数据 存储数据…
结构struct 联合Union和枚举Enum的细节讨论 联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换.联合体对象在同一时间只能存储一个成员的值.联合的内存大小取决于其中字节数最多的成员,而不是累加,联合也会进行字长对齐.在定义联合变量的时候可以指定初始值,但是只能制定一个初始值(测试过似乎无法设置初值),而且该初始值的类型必须与联合的第一个成员的类型匹配.可以取一个联合变量的地址,也可以取变量中的…
union ( 共用体):构造数据类型,也叫联合体  用途:使几个不同类型的变量共占一段内存(相互覆盖) struct ( 结构体 ):是一种构造类型 用途: 把不同的数据组合成一个整体——自定义数据类型 主要区别:1. struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员; 而struct的所有成员都存在.在struct中,各成员都占有自己的内存空间,它们是同时存在的,一个struct变量的总长度等于所有成员长度之和,遵从字节对其…
结构体与联合体是C语言的常见数据类型,可对C的基本数据类型进行组合使之能表示复杂的数据结构,意义深远,是优异代码的必备工具.一.        struct与 union的基本用法,在语法上union与struct相同,因此只以struct为例1.1        基本用法: struct AA{ int a; int b;}; //结构体的声明和定义 struct AA s1; //变量的声明和定义 s1.a=3; //变量的使用: 复制代码 1.2        在声明结构体的同时定义变量:…
struct/enum/union加typedef与不加typedef 匿名结构体 struct { int a; int b; } v; // 这里表示定义了一个结构体的变量v,且结构体类型没有名字,后续不能再定义结构体,除非又把结构体写一遍. 有名字的结构体 - 直接定义变量 struct struct_type{ int a; int b; } v; // 这里表示定义了一个结构体的变量v,且结构体类型的名字为 "struct struct_type" // 后续要定义结构体变量…
空结构体占用的内存多大? struct d { }; int main() { struct d d1; struct d d2; printf("%d,%0x\n",sizeof(d1),&d1); //求内存大小,及结构体变量的地址 printf("%d,%0x\n",sizeof(d1),&d2); } 不同的编译器,分配的大小不一样,一般取0个字节或1个字节. 柔性数组:数组大小待定的数组,C语言中结构体最后一个元素可以是大小未知的数组,C语…
redis-server 接收到客户端的第一条命令 redis-cli 给 redis-server 发送的第一条数据是 *1\r\n\$7\r\nCOMMAND\r\n .我们来看下对于这条数据如何处理,单步调试一下 readQueryFromClient 调用 read 函数收取完数据,接着继续处理 c→querybuf 的代码即可.经实际跟踪调试,调用的是 processInputBuffer 函数,位于 networking.c 文件中: /* This function is call…
前言 Winamp是一款非常经典的音乐播放软件,它于上世纪九十年代后期问世.与现在音乐播放软件行业百家争鸣的情况不同,当时可以说Winamp就是听音乐的唯一选择了,相信那个时代的电脑玩家是深有体会的.而时至今日,依然有一批忠实的Winamp粉丝还在坚守着这块阵地,这也就说明了这款播放器依旧是有很强的生命力. 但是,这款软件的漏洞也是挺多的,五花八门,涵盖了很多方面.而我们这次所讨论的就是这款软件在读取whatsnew.txt,也就是更新历史文件时出现的缓冲区溢出漏洞. 漏洞重现 正常的whats…
struct 1.结构体和数组的差别:能够再结构体里声明数组.结构体变量能够相互赋值.而数组不行. 2.struct与class的差别:class的成员訪问权限默认是private,而struct成员的是public. 3.结构体的定义: (1)可递归.结构体内部能够使用指针指向自己.比如.链表. (2)可嵌套.结构体内部能够包括其它的结构体. 4.结构体中的位域. 在存储信息时,不须要占用一个完整的字节,而仅仅须要占几个或一个二进制位. 位域定义与结构定义相仿.其形式为: struct 位域结…
struct 结构体的大小不是简单的成员相加,要考虑存储空间的字节对齐 1.空结构体的大小为1 2.含有static的结构体在计算大小时不算上static变量,因为static存储在全局数据空间,而sizeof计算的是栈分配的空间 一.编译器存储结构体的准则(很重要):  结构体变量的首地址能够被其最宽基本类型成员的大小所整除:  结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节: 例如:|[char][char][x][x][        …
1.字节对齐的细节和编译器实现相关,但一般而言,如在windows下,就VC而言,满足一下三个准则:1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除:2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding): 即:在默认情况下,VC规定各成员变量存放的起始地址相对于结构的起始地址的偏移量:sizeof(类型)或其倍数3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译…
Union: 共用体 Struct:结构体 两者的区别: 1:共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放一个被选中的成员, 而结构体则存放所有的成员变量. 2:对于共用体的不同成员赋值,将会对其他成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的 3:内存分配不同 union的大小为其内部所有变量的最大值,按照最大类型的倍数进行分配大小如:typedef Union {char c[10];char cc1;}u11; typed…
1. 动态内存分配 (1)C++通过new关键字进行动态内存申请,是以类型为单位来申请空间大小的 (2)delete关键字用于内存释放 ▲注意释放数组时要加[],否则只释放这个数组中的第1个元素. [实例分析]C++中的动态内存分配 #include <stdio.h> int main() { int* p = new int; *p = ; *p = *p + ; printf("p = %p\n", p); //p保存堆上开辟空间的地址 printf( delete…
关于C++和C的区别 区别最大的是struct,C++中的struct几乎和class一样了,可以有成员函数,而C中的struct只能包含成员变量. enum,union没区别. struct的定义 struct 结构标签 { 类型1 标识符1: 类型2 标识符2: 类型3 标识符3: 类型4 标识符4: 类型5 标识符5: }: 1.建议将struct的声明和变量的定义分开写, 2.struct内可以放任何类型的变量声明. 对齐原则 1.数据成员对齐规则.每个数据成员存储的起始位置要从该成员大…
原文地址:http://anders0913.iteye.com/blog/411986 用户使用socket系统调用编写应用程序时,通过一个数字来表示一个socket,所有的操作都在该数字上进行,这个数字称为套接字描述符.在系统调用 的实现函数里,这个数字就会被映射成一个表示socket的结构体,该结构体保存了该socket的所有属性和数据.在内核的协议中实现中,关于表示 socket的结构体,是一个比较复杂的东西,下面一一介绍.     struct socket.     这是一个基本的B…
1. StructHandler.c: /* * StructHandler.c * *  Created on: Jul 6, 2013 *      Author: wangle */#include <stdio.h>#include <stdlib.h>#include <string.h>void modifyName(struct student *p); int main(){    struct student{        char name[50]…
联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换.联合体对象在同一时间只能存储一个成员的值.联合的内存大小取决于其中字节数最多的成员,而不是累加,联合也会进行字长对齐.在定义联合变量的时候可以指定初始值,但是只能制定一个初始值(测试过似乎无法设置初值),而且该初始值的类型必须与联合的第一个成员的类型匹配.可以取一个联合变量的地址,也可以取变量中的任一个成员的地址,它们总是相等的.可以在同类型的联合变量之…