共用体

利用联合体(共用体)判断机器存储方式(大端存储或小端存储)

拈花ヽ惹草 提交于 2020-02-07 02:00:58
利用C++程序判断机器存储方式(大端存储或小端存储) 1.大端存储和小端存储 概念 大端存储与小端存储模式主要指的是数据在计算机中存储的两种字节优先顺序。 小端存储指从内存的低地址开始,先存储数据的低序字节再存高序字节; 相反,大端存储指从内存的低地址开始,先存储数据的高序字节再存储数据的低序字节。 各自优点: 小端存储:便于数据之间的类型转换,例如: long 类型转换为 int 类型时,高地址部分的数据可以直接截掉。 大端存储:便于数据类型的符号判断,因为最低地址位数据即为符号位,可以直接判断数据的正负号。 用途: 小端存储:常见于本地主机上 ( 也有部分类型主机为大端存储 ) 。 大端存储:常见于网络通信上,网际协议TCP / IP在传输整型数据时一般使用大端存储模式表示 , 例如TCP / IP中 表示端口和IP时,均采用的是大端存储。 ———————————————— 版权声明:本文为CSDN博主「自由不死」的原创文章,遵循 CC 4.0 BY - SA 版权协议,转载请附上原文出处 链接及本声明。 原文链接:https : / / blog . csdn . net / yyc1023 / article / details / 80270598 以32位存储十六进制数据0x00000001为例 大端存储即为 内存地址 0x4000 0x4001 0x4002

共用体

北慕城南 提交于 2020-01-25 10:08:09
用typedef定义类型 1、用typedef声明新的类型名来代替已有的类型名。 例:声明INTEGER为整型 #include "StdAfx.h" #include<stdio.h> #include<stdlib.h> typedef int INTEGER; void main() { INTEGER i=1; int j=2; printf("%d%d\n\n",i,j); } 2、声明结构类型 例: #include "StdAfx.h" #include<stdio.h> #include<stdlib.h> typedef struct{int month;int day;int year;}DATE; void main() { DATE date_one; date_one.month=3; date_one.day=24; date_one.year=2000; printf("%d-%d-%d\n",date_one.year,date_one.month,date_one.day); } 3、声明NUM为整型 #include "StdAfx.h" #include<stdio.h> #include<stdlib.h> typedef int NUM[100]; void main() { NUM num; printf("%d\n\n",sizeof

共用体和枚举类型

☆樱花仙子☆ 提交于 2020-01-25 10:06:53
描述 有n个人员的数据,其中有老师和学生。学生的数据中包括姓名,号码,性别,职业,班号;老师的数据中包括:姓名,号码,性别,职业,职务。可以看出,学生和老师的数据是不同的,学生有班号而没职务,老师有职务而没班号。现要求你根据输入信息,查询某一号码对应的姓名、性别以及班级(如果是老师,则是职务)。 要求用同一结构体来保存老师和同学的数据,并且在结构体当中使用共用体来存学生的学号(或老师的职务)。此外,人员性别应用枚举类型来实现。 输入 第一行输入n,表示有n个人员。接下来n行,每行表示一个人的数据分别是姓名,号码,性别(0表示女,1表示男),职业(字符s表示学生,t表示老师),班级或职务(如果职业是s,那么就输入班级,用一个整数表示;如果职业是t,就输入职务,用一个长度不超过10的字符串表示) 第n+1行是一个m,表示要查询的次数接下来是m个数,表示要查询的号码 输出 根据输入数据,输出号码对应的姓名、性别以及班级(如果是老师,则是职务)。 样例输入 2 Li 1011 1 s 501 wang 2085 0 t prof 1 1011 样例输出 Li 1 501 #include<iostream> using namespace std; struct ac{ char name[20]; int hm; int xb; char s; char zy; char zw[20];

C: 共用体

余生长醉 提交于 2019-12-24 01:06:56
共用体 https : / / www . runoob . com / cprogramming / c - unions . html #include <stdio.h> #include <string.h> union Data { int i ; float f ; char str [ 20 ] ; } ; int main ( ) { union Data data ; data . i = 10 ; printf ( "data.i : %d\n" , data . i ) ; data . f = 220.5 ; printf ( "data.f : %f\n" , data . f ) ; strcpy ( data . str , "C Programming" ) ; printf ( "data.str : %s\n" , data . str ) ; return 0 ; } 来源: CSDN 作者: hahahafree 链接: https://blog.csdn.net/weixin_43731793/article/details/103674091

C语言重要函数 memcpy与memmove,memset

江枫思渺然 提交于 2019-12-07 09:15:05
包含头文件: #include <stdlib.h> 1>:malloc calloc realloc free函数 //动态内存分配函数 三个函数的声明分别是: void* malloc(unsigned size); malloc()函数有一个参数,即要分配的内存空间的大小: void* calloc(size_t nelem, size_t elsize); calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。 如果调用成功,函数malloc()和函数calloc()都将返回所分配的内存空间的首地址。 malloc和calloc都可以分配内存区,但malloc一次只能申请一个内存区,calloc一次可以申请多个内存区.另外calloc会把分配来的内存区初试化为0,malloc不会进行初始化. void* realloc(void* ptr, unsigned newsize); realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度 free的调用形式为free(void*ptr):释放ptr所指向的一块内存空间。 #i nclude <stdio.h> #i nclude <stdlib.h> main() { int *p=NULL; p=(int *

PHP7变量的内部实现(一)

匿名 (未验证) 提交于 2019-12-02 22:11:45
本文翻译自Nikita的文章,水平有限,如有错误,欢迎指正 查看原文 受篇幅限制,这篇文章将分为两个部分。本部分会讲解PHP5和PHP7在zval结构体的差异,同时也会讨论引用的实现。第二部分会深入探究一些数据类型如string和对象的实现。 PHP5中zval结构体的定义如下: typedef struct _zval_struct { zvalue_value value; zend_uint refcount__gc; zend_uchar type; zend_uchar is_ref__gc; } zval; 可以看到,zval由value、type和一些额外的__gc信息组成。__gc与垃圾回收相关,我们稍后讨论。value是一个共用体,可以存储y一个zval各种可能的值。 typedef union _zvalue_value { long lval; // For booleans, integers and resources double dval; // For floating point numbers struct { // For strings char *val; int len; } str; HashTable *ht; // For arrays zend_object_value obj; // For objects zend_ast

C 共用体

荒凉一梦 提交于 2019-12-02 03:24:29
参考链接: https://www.runoob.com/cprogramming/c-unions.html 共用体和结构体类似,不过不是保存多个不同类型的数据项的,而是可以在一个储存位置上储存多个不同类型的数据项,但是任意时刻都只能储存一个数据类型的数据项。 共用体的定义 union [union_tag_name]{ type member_name; //例 char name[1000] ... }[one or more variables]; 共用体的占用的内存应足够存储共用体中最大的成员,如上面共用体的sizeof()为1000。 访问共用体成员 访问共用体成员使用 成员访问符 . 注意只能存储一个值,新的值存入后虽然老的值能访问,但是值已经损坏 来源: https://www.cnblogs.com/Gaoqiking/p/11728734.html

C零基础视频-42-共用体

孤街醉人 提交于 2019-12-01 17:24:18
目录 共用体的定义与使用 共用体与结构体的比较 共用体的定义与使用 共用体的关键字是union,共用体是非基本数据类型,同结构体类似,我们需要先声明共用体类型,再利用自定义的类型去定义变量。 #include <stdio.h> #include <string.h> union MyUnion { double dbWeight; int nID; char szName[8]; }; int main(int argc, char* argv[]) { MyUnion unionValue; unionValue.dbWeight = 3.14; unionValue.nID = 5; strcpy(unionValue.szName, "Jack"); return 0; } 共用体与结构体的比较 从以上的代码看,结构体与共用体的使用似乎非常相似:都是非基本数据类型,都需要先定义类型,再定义变量,都通过"."运算符取成员。 实则不然,它们最大的区别是: 结构体最终占用的内存大小,是所有成员的相加的结果,各成员在内存中不重叠 共用体最终占用的大小,按成员最大者计算,各成员共用内存 我们可以举生活中例子,比如我们有块公告板,公告板上每次会记录一条信息,但是信息的类型不同,有可能是: 体重信息,double类型 学号信息,int类型 姓名信息,char数组类型 也就是说,

C语言中的共用体(union)和枚举(enum)

青春壹個敷衍的年華 提交于 2019-11-29 16:39:55
1 union union Data{ int i; char ch; float f; }a={1, 'a', 1.5};  //错误 union Data a = {16};  //正确 union Data a = {.ch = ‘j’};  //正确 在什么情况下使用共用体类型的数据?往往在数据处理中,有时需要对同一段空间安排不同的用途,这时用共用体类型比较方便,能增加程序处理的灵活性。 例如,学生的数据包括:姓名、号码、性别、职业、 班级 。 教师的数据包括:姓名、号码、性别、职业、 职务 。 要求用同一个表格来表示。 C语言核心代码 1 struct{ 2 int num; //成员 编号 3 char name[10]; //成员 姓名 4 char sex; //成员 性别 5 union{ //声明无名共用体类型 6 int class; //成员 班级 7 char position[10];//成员 职务 8 }category; 9 }person[2]; View Code 2 enum 一个变量只有几种可能的值,则可以定义为枚举(enumeration)类型。 enum Weekday { sun=7, mon=1 , tue, wed, thui, fri, sat } workday, weak_end;   {}内,tue为2,wed为3

C++基础学习4

旧巷老猫 提交于 2019-11-28 07:20:48
7自定义数据类型 7.1结构体类型 用户可以自己声明的类型还有结构体(structure)类型、 共用体(union)类型、 枚举(enumeration)类型、 类(class )类型等, 这些统称为用户自定义类型 。 结构体是 将不同类型的数据组合成一个有机的整体 ,这些组合在一个整体中的数据是互相联系的。 struct Student//声明一个结构体类型Student { int num;//包括一个整型变量num char name[20];//包括一个字符数组name,可以容纳20个字符 char sex;//包括一个字符变量sex int age;//包括一个整型变量age float score;//包括一个单精度型变量 char addr[30];//包括一个字符数组addr,可以容纳30个字符 } ;//最后有一个分号 声明结构体类型的位置一般在文件的开头, 在所有函数(包括main函数)之前。 定义: (1) 先声明结构体类型再定义变量名 。 Student student1, student2; (2) 在声明类型的同时定义变量 (3) 直接定义结构体类型变量 结构体变量的初始化 ,可以在定义时指定初始值。 结构体变量的引用 (1) 可以将一个结构体变量的值赋给另一个具有相同结构的结构体变 量。 student1= student2; (2)