当前位置: 首页 > news >正文

asp.net 微网站开发教程企业查询官网

asp.net 微网站开发教程,企业查询官网,淘客网站推广免备案,郴州市官网入口文章目录 C中的union什么是union?定义union示例一输出结果: 示例二修正后的代码解释输出结果结论 union的特性匿名union示例 union和struct的区别1. 内存布局2. 同时访问3. 用途 union和class的区别1. 数据成员2. 功能性3. 适用场景 在C编程中&#xff0…

文章目录

  • C++中的`union`
    • 什么是`union`?
    • 定义`union`
    • 示例一
      • 输出结果:
    • 示例二
      • 修正后的代码
      • 解释
      • 输出结果
      • 结论
    • `union`的特性
      • 匿名`union`示例
    • `union`和`struct`的区别
      • 1. 内存布局
      • 2. 同时访问
      • 3. 用途
    • `union`和`class`的区别
      • 1. 数据成员
      • 2. 功能性
      • 3. 适用场景

在C++编程中,union是一种独特的数据结构,它允许不同类型的变量共用同一块内存空间。这一特性使得union在某些特定场景下非常有用,尤其是在内存受限或需要节省内存的嵌入式系统中。union的每个成员共享相同的内存地址,这意味着在任何时刻,union只能存储一个成员的值。尽管这种限制使得union的使用变得稍显复杂,但它同时提供了一种灵活而强大的工具,用于处理多种数据类型。

C++中的union

什么是union

union(联合体)是一种特殊的数据结构,它允许你在同一个内存位置存储不同类型的数据。union中的所有成员共用同一块内存区域,意味着一个union变量的所有成员共享相同的内存地址。因此,union中最多只能有一个成员变量有效。

定义union

定义union的方式与结构体相似,语法如下:

union UnionName {MemberType1 member1;MemberType2 member2;// ...
};

示例一

#include <iostream>union Data {int i;float f;char c;
};int main() {Data data;data.i = 10;std::cout << "data.i: " << data.i << std::endl;data.f = 3.14;std::cout << "data.f: " << data.f << std::endl;std::cout << "data.i after setting data.f: " << data.i << std::endl; // 注意这一行data.c = 'A';std::cout << "data.c: " << data.c << std::endl;std::cout << "data.f after setting data.c: " << data.f << std::endl; // 注意这一行return 0;
}

输出结果:

data.i: 10
data.f: 3.14
data.i after setting data.f: 1078523331
data.c: A
data.f after setting data.c: 1.36424e-43

在这个例子中,由于union中的所有成员共享相同的内存位置,所以在修改data.fdata.c后,data.i的值被覆盖,输出值也会发生变化。

示例二

你的代码有许多语法错误和不完整的部分,我会修复并为你提供一个可编译的版本。以下是修正后的代码及其解释:

修正后的代码

#include <iostream>struct Vector2 {float x, y;
};struct Vector4 {union {struct {float x, y, z, w;};struct {Vector2 a, b;};};
};void PrintVector2(const Vector2& vector) {std::cout << vector.x << ", " << vector.y << std::endl;
}int main() {Vector4 vector = { 1.0f, 2.0f, 3.0f, 4.0f };PrintVector2(vector.a);  // 输出: 1.0, 2.0PrintVector2(vector.b);  // 输出: 3.0, 4.0vector.z = 500.0f;  // 修改z的值为500.0fstd::cout << std::endl;PrintVector2(vector.a);  // 输出: 1.0, 2.0PrintVector2(vector.b);  // 输出: 500.0, 4.0std::cin.get();return 0;
}

解释

  1. Vector2结构体:定义了一个简单的结构体,包含两个浮点数xy

  2. Vector4结构体

    • Vector4结构体包含一个联合体(union),该联合体可以在相同的内存空间内存储不同的数据。
    • 联合体内有两个匿名结构体(匿名结构体是没有名字的结构体,可以直接访问其成员):
      • 第一个结构体包含四个浮点数x, y, z, w
      • 第二个结构体包含两个Vector2类型的成员ab
    • 由于这些成员共享同一块内存,因此修改z会影响b中的数据。
  3. PrintVector2函数:这是一个简单的打印函数,用于输出Vector2xy值。

  4. main函数

    • 初始化了一个Vector4对象vector,并赋予x, y, z, w初始值1.0f, 2.0f, 3.0f, 4.0f
    • 然后通过PrintVector2函数分别打印vector.avector.b
    • 修改z的值为500.0f后,重新打印vector.avector.b,可以看到修改zb中的值也发生了变化。

输出结果

1.0, 2.0
3.0, 4.01.0, 2.0
500.0, 4.0

结论

通过这种方式,我们可以在一个union中存储不同的结构体,利用它们共享的内存,实现灵活的数据操作。这种技巧常用于内存受限的嵌入式系统中。

union的特性

  1. 内存共享union中的所有成员共用一块内存,union的大小取决于其最大成员的大小。
  2. 一次只能保存一个值:虽然union可以有多个成员,但在任何给定时刻只能存储一个有效值,其他成员的值会被覆盖。
  3. 匿名union:如果不需要命名,可以使用匿名union,它的成员可以直接访问,而不需要通过union变量名。

匿名union示例

#include <iostream>int main() {union {int i;float f;};i = 10;std::cout << "i: " << i << std::endl;f = 3.14;std::cout << "f: " << f << std::endl;std::cout << "i after setting f: " << i << std::endl;return 0;
}

unionstruct的区别

1. 内存布局

  • struct:每个成员都有自己的内存空间,结构体的大小是所有成员大小的总和加上可能的对齐填充。
  • union:所有成员共用同一块内存,union的大小是最大成员的大小。

2. 同时访问

  • struct:可以同时访问所有成员,因为每个成员占用不同的内存区域。
  • union:只能访问一个成员,访问其他成员时,结果是未定义的。

3. 用途

  • struct:用于组合不同类型的变量,以便能够同时存储和访问这些变量。
  • union:用于节省内存,特别是在你知道同一时刻只需要存储其中一个变量的情况下。

unionclass的区别

1. 数据成员

  • class:默认情况下,其成员的访问权限是private,类可以包含成员函数和构造函数、析构函数。
  • union:所有成员默认是public的。union可以包含构造函数和析构函数,但只能有一个活跃的成员。

2. 功能性

  • class:具有更丰富的功能性,可以封装数据和行为,支持继承和多态等特性。
  • union:功能较为有限,主要用于节省内存,没有继承和多态等高级特性。

3. 适用场景

  • class:用于创建复杂的数据类型,封装数据和行为,适用于面向对象编程。
  • union:主要用于节省内存空间,适用于内存管理要求严格的场景。

通过这些对比,可以看出unionstructclass在内存管理和使用场景上的区别。union适合用于需要节省内存且同一时刻只需要存储一种数据的情况,而structclass更适合需要同时存储并访问多种数据的情况。

http://www.ds6.com.cn/news/112591.html

相关文章:

  • 扁平手机网站百度安全中心
  • 京伦科技做的网站如何网络电商推广方案
  • 1688域名网站营销战略有哪些内容
  • seo技术优化整站seo信息是什么
  • 怀柔武汉阳网站建设友情链接购买平台
  • 佛山外贸建站公司站内推广和站外推广的区别
  • 国内做房车游网站关键洞察力
  • 做网站的公司名字一站式海外推广平台
  • wordpress通知站点bing网络推广公司主要做什么
  • 网站设计文章吉林网络推广公司
  • 做论坛网站怎么赚钱吗头条号权重查询
  • 沈阳个人建站模板免费行情软件app网站下载大全
  • 哪个网站可以做经济模拟题收录好的网站
  • 沪尚茗居全包价格长沙关键词优化平台
  • 宝山网站建设公司关键词优化的主要工具
  • 济南做网站公司排名苏州手机关键词优化
  • 微网站怎么自己做国外网络推广
  • 小规模企业所得税怎么算seo顾问阿亮
  • 做网站和做新媒体运营西安seo顾问公司
  • wordpress网站文件目录白帽seo
  • 可信的邢台做网站拉新推广怎么找渠道
  • 网站对不同分辨率seo是哪个英文的简写
  • 做名片赞机器人电脑网站是多少钱淘宝关键词怎么做排名靠前
  • 与魔鬼做交易的真实网站网站排名首页
  • 用ps做班级网站百度新闻网站
  • 手机端网站怎么做自媒体平台排名前十
  • 网站建设高度厦门网站快速排名优化
  • 新网站不被收录的原因网站建设营销型
  • 网站开发重庆网络营销推广的优势
  • 武汉大型网站建设营销和销售的区别