From 537eca807226b1dd4821c958f29772a1f7b29c5e Mon Sep 17 00:00:00 2001 From: ruanyf Date: Thu, 29 Dec 2022 00:49:10 +0800 Subject: [PATCH] docs(union): fixed #86 --- docs/union.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/union.md b/docs/union.md index 84c6885..9edfbf7 100644 --- a/docs/union.md +++ b/docs/union.md @@ -2,7 +2,7 @@ 有时需要一种数据结构,不同的场合表示不同的数据类型。比如,如果只用一种数据结构表示水果的“量”,这种结构就需要有时是整数(6个苹果),有时是浮点数(1.5公斤草莓)。 -C 语言提供了 Union 结构,用来自定义可以灵活变更的数据结构。它内部可以包含各种属性,但同一时间只能有一个属性,因为所有属性都保存在同一个内存地址,后面写入的属性会覆盖前面的属性。这样做的最大好处是节省空间。 +C 语言提供了 Union 结构,用来自定义可以灵活变更的数据结构。它内部包含各种属性,但是所有属性共用一块内存,导致这些属性都是对同一个二进制数据的解读,其中往往只有一个属性的解读是有意义的。并且,后面写入的属性会覆盖前面的属性,这意味着同一块内存,可以先供某一个属性使用,然后再供另一个属性使用。这样做的最大好处是节省内存空间。 ```c union quantity { @@ -12,7 +12,7 @@ union quantity { }; ``` -上面示例中,`union`命令定义了一个包含三个属性的数据类型`quantity`。虽然包含三个属性,但是同一时间只能取到一个属性。最后赋值的属性,就是可以取到值的那个属性。 +上面示例中,`union`命令定义了一个包含三个属性的数据类型`quantity`。虽然包含三个属性,但是只能写入一个值,三个属性都是对这个值的不同解读。最后赋值的属性,往往就是可以取到有意义的值的那个属性。 使用时,声明一个该类型的变量。 @@ -44,7 +44,7 @@ q.weight = 0.5; printf("weight is %f\n", q.weight); // weight is 0.5 ``` -一旦为其他属性赋值,原先可以取到值的`q.count`属性就不再有效了。除了这一点,Union 结构的其他用法与 Struct 结构,基本上是一致的。 +一旦为其他属性赋值,原先可以取到值的`q.count`属性就跟着改变,使用它可能就没有意义了。除了这一点,Union 结构的其他用法与 Struct 结构,基本上是一致的。 Union 结构也支持指针运算符`->`。 @@ -66,7 +66,7 @@ printf("%d\n", ptr->count); // 4 上面示例中,`ptr`是`q`的指针,那么`ptr->count`等同于`q.count`。 -Union 结构指针与它的属性有关,当前哪个属性能够取到值,它的指针就是对应的数据类型。 +Union 结构指针与它的属性有关,当前正在按照哪个属性解读数据,它的指针就是对应的数据类型。 ```c union foo {