涉县做网站,网页创意的再设计,自己建网站做淘宝客,杭州网站建设公司 4000262263一、 结构体和联合体有什么区别#xff1f;能否在声明过程当中缺省名字#xff1f;#xff08;需要写清楚使用方法#xff09;
结构体的各个成员占用不同的内存空间#xff0c;总大小是所有成员大小之和#xff08;结构体字节对齐#xff09;#xff1a;
typedef str…一、 结构体和联合体有什么区别能否在声明过程当中缺省名字需要写清楚使用方法
结构体的各个成员占用不同的内存空间总大小是所有成员大小之和结构体字节对齐
typedef struct Student {int a;char b;short c;char d;
} stu;对齐规则找成员中最大的类型 用他作为字节对齐数求出来的结果一定是对其数的整数倍整数倍的地址对齐
abxcdxxx 该结构体成员中的最大类型为 int 类型 4 字节所以按 4 字节对齐c 为 short 类型占 2 字节由于按整数倍的地址对齐所以不可以紧挨着 b 放需要在前面补一位再放 c d 为 char 类型占 1 字节需要按 4 字节对齐所以需要在后面补 3 位。 最后求得该结构体所占内存大小为 12 字节。
联合体的所有成员共享一块内存空间联合体的大小等于其最大成员的大小
typedef union Student {int a;char c;
} stu;由于联合体的大小等于其最大成员的大小所以该联合体所占内存大小为 4 字节。
a(c)aaa
可以用联合体检测大小端存储
大端存储低地址放高位高地址放低位
十进制 1 大端存储
00000000000000000000000000000001
小端存储高地址放高位低地址放低位
十进制 1 小端存储
00000001000000000000000000000000
检测大小端存储代码
#includeiostream
using namespace std;
int checkSystem() {union System {int a;char c;char b;} un;un.a 1;return un.c 1;
}int main() {cout checkSystem(); // 输出 1 为小端存储0 为大端存储 return 0;
} 可以在声明的时候缺省名字 我们可以在定义的同时 创建该类型的对象也可以在定义时加上 typedef 对类型起别名 那这样就可以用别名再创建对象了
在定义的同时 创建该类型的对象
#includeiostream
using namespace std;
#include string
struct{int a;char d;char b;
} stu;int main() {stu.a 1;cout stu.a;return 0;
}
输出
1
在定义时加上 typedef 对类型起别名用别名再创建对象
#includeiostream
using namespace std;
#include string
typedef struct{int a;char d;char b;
} stu;int main() {stu s;s.a 1;cout s.a;return 0;
}
输出
1
二、结构体可以包含函数吗在 C 和 C 中有何不同
C语言中的结构体通常不包含成员函数而是使用外部函数来操作结构体的数据。
C允许在结构体中定义成员函数这些函数可以访问结构体的私有成员并且可以像类一样使用封装。
C语言中的结构体没有访问控制的概念所有成员默认都是公有的可以直接访问。C中的结构体可以有访问控制支持public、private和protected访问修饰符。在C中
结构体struct的默认访问权限是公有的public。这意味着结构体中的成员默认情况
下可以被外部访问。与结构体不同类class的默认访问权限是私有的private。
C 中的结构体的使用要加上struct关键字或者用typedef取别名后直接使用C中的结构体使用时不需要加
struct关键字在 C 中直接使用类型名加变量名即可Cstruct A{}; int main () {struct A a;}Cstruct A{};int main () {A a;}
C语言中没有构造函数和析构函数的概念。C中的结构体可以有构造函数和析构函数允许在创建和销毁结构体实例时执行特定的初始化和清理代码
C的结构体不可以初始化成员C中的结构体可以初始化成员变量
C语言不支持继承因此结构体不能作为其他结构体或类型的基类。C支持继承结构体可以作为基类允许其他类或结构体继承其属性和方法。