C的联合体和结构体区别

联合体与结构体是很容易混淆的概念。粗略一看,两者无论声明、定义还是定义对象的方式都很相似。然而这两个东西的概念和作用实际千差万别。首先,联合体的各个成员共用内存,并应该同时只能有一个成员得到这块内存的使用权(即对内存的读写),而结构体各个成员各自拥有内存,各自使用互不干涉。所以,某种意义上来说,联合体比结构体节约内存。举个例子:typedef struct{    int i;    int j;}A;typedef union{  int i;  double j;}U;sizeof(A)的值是8,sizeof(U)的值也是8(不是12)。为什么sizeof(U)不是12呢?因为union中各成员共用内存,i和j的内存是同一块。而且整体内存大小以最大内存的成员的划分。即U的内存大小是double的大小,为8了。sizeof(A)大小为8,因为struct中i和j各自得到了一块内存,每人4个字节,加起来就是8了。了解了联合体共用内存的概念,也就是明白了为何每次只能对其一个成员赋值了,因为如果对另一个赋值,会覆盖了上一个成员的值。

是的,函数的重载是在编译的时候发生,而虚函数是在运行的时候确定。其实有时候称函数的重载为静态多态性,而虚函数为动态多态性
时间: 2025-01-02 18:58:08

C的联合体和结构体区别的相关文章

联合体与结构体的区别

联合体,又称共用体.编程的时候需要使几种不同类型的变量存放到同一段内存单元中,而衍生出来的一种类型.也就是说,联合体中每次只能存其中的一个变量,这个变量在联合体变量中存入新的成员就失效了!!!用法与结构体一致,但是多用于结构体内部. 1 struct name 2 { 3 int age; 4 char* name; 5 union text //text是标题,标题可以不写 ,此标题在在结构体内无作用 6 { 7 char a; 8 ... 9 } 10 }mytext;//mytext是结构

联合体和结构体

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一.前言 "联合体"(union)与"结构体"(struct)有一些相似之处.但两者有本质上的不同.在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和.而在"联合"中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度.应该说明的是, 这里所谓的共享不是指把多个

C语言-结构体-联合体

结构体 在Java中,我们要表示一个复合的数据类型就会使用对象去封装.而C就有结构体. 结构体是C语言中自定义的数据类型,是一组变量的集合,有别于数组,数组仅限于同一种数据类型,而结构体可以是任何数据类型,包括数组.结构体里面的每一个变量或者数组都是结构体的成员. 下面来看看结构体的基本使用 14-18行,定义了一个名称为Person的结构体,结构体里面有 age,money,sex 三种数据类型: 20-24行,是结构体的声明一个名为 P 的 Person 变量,并赋值: 25-27行,是结构

结构体/联合体 所占用内存

1 #include "stdafx.h" 2 #include <iostream> 3 using namespace std; 4 5 typedef struct Parameter{ 6 int a; 7 long b; 8 double c; 9 int d; 10 }Parameter; 11 12 typedef union Para{ 13 unsigned a; 14 double b; 15 long c; 16 int d; 17 }Para; 18

第五章:数组 结构体 和联合体

1.结构体 2.联合体 3.结构体和联合体的操作 4.非压缩数组 5.压缩数组 6.数组操作 7.数组foreache 循环 8.用于数组的特殊系统函数 结构体 1.结构体成员可以是任何数据类型 包括基本类型和用户自定义类型 2.结构体的声明 var/wire 都可以定义为结构体类型.当定义为结构体类型时,结构体中的成员都必须是四态类型,成员不能是wire类型. 3.结构体的初始化 用值列表方式初始化 '{} 4.结构体的赋值 5.压缩结构体 可以视为独立的变量,具体与向量类似的操作 6.非压缩

类的声明 , 类和结构体的区别 , 内联函数

#include<iostream> using namespace std; class A;//类的声明 class B { private: A *a;//必须是指针 ,不能为 A a; }; class  A { private: B b; }; int main() {} 类和结构体区别: 结构体默认public 类默认是private 在继承方式:结构体默认公有继承 类默认私有继承 inline 调用内联函数并没有执行函数的调用过程,只是把函数的代码嵌入到了程序的调用点 , 减少了

swift 类和结构体

1:类和结构体定义 类和结构体分别通过关键字class 和struct定义. swift的编码风格是类class和结构体struct名字使用大写字母开头的匈牙利表示法,相反的.类的方法和属性则用小写字母开头的匈牙利表示法. 结构体总是通过被复制而进行代码传递的. struct SForm{ var iXX:Int = 99 var strHello:String = "dsf" func testFunc(iXX:Int)->Int{ return iXX+1 } } class

结构体与联合体的区别

联合体用途:使几个不同类型的变量共占一段内存(相互覆盖) 结构体是一种构造数据类型用途:把不同类型的数据组合成一个整体-------自定义数据类型 Struct与Union主要有以下区别: 1. struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员, 而struct的所有成员都存在.在struct中,各成员都占有自己的内存空间,它们是同时存在的.一个struct变量的总长度等于所有成员长度之和.在Union中,所有成员不能同时占用它

数组、结构体、联合体、枚举类型、类型转换

1.数组 int num[2] = { 1, 2 };//1×2,num[0]=1 int num[2][2] = { { 00, 01 }, { 10, 11 } };//2×2,num[1][1]=11 int num[2][2][2] = { {{000,001},{010,011}}, {{100,101},{110,111}} };//2个2×2数组,num[1][1][1]=111 2.结构体 #include <stdio.h> int main() { struct Famil