如何在 C 联合中声明变量?
How to declare variables in C unions?
我刚开始接触 C,我正在先阅读 C。根据那本书,我定义了一个联合并尝试在其中声明变量。但是它没有给出预期的 output.Here 是代码
#include <stdio.h>
typedef union{
short count;
float weight;
float volume;
} quantity;
int main()
{
quantity q;
q.count = 4;
q.weight = 1.7;
q.volume = 3.7;
printf("count = %i\tweight = %.2f\tvolume = %2.f\t", q.count, q.weight, q.volume);
}
这是输出
count = -13107 weight = 3.70 volume = 3.70
为什么我得到的计数是负数而重量和体积是相同的浮点数?
一个union
allows to store different data types in the same memory location. You can define a union with many members, but only one member can contain a value at any given time. That is why only the last element you initialized is printed correctly. What you might be looking for is a struct
.
typedef struct {
short count;
float weight;
float volume;
} quantity;
A union
为其每个成员共享内存,因此它一次只能存储其中一个成员。如果您写给一位成员并阅读另一位成员,您会得到其他东西。
如果您希望能够同时保存所有这些值,您需要 struct
。
typedef struct {
short count;
float weight;
float volume;
} quantity;
您一定错过了教科书中的部分,该部分说联合体的所有成员 共享 完全相同的内存,并且所有成员的值将是值上次分配给成员时使用的内存位模式。
由于您最后设置了 volume
成员,因此所有成员都将具有与 float
值相同的内存位模式 3.7
。
并且整数和浮点值在内存中具有不同的位模式,因此 count
的值看起来几乎是随机的或垃圾。
如果您想要三个不同且独立的成员,您需要一个结构而不是联合。
联合是 C 中可用的一种特殊数据类型,它允许将不同的数据类型存储在同一内存位置。您可以定义一个包含许多成员的联合,但在任何给定时间只有一个成员可以包含一个值。
所以如果你想在所有三个变量中存储值,那么你应该使用结构。
typedef struct {
short count;
float weight;
float volume;
}
我刚开始接触 C,我正在先阅读 C。根据那本书,我定义了一个联合并尝试在其中声明变量。但是它没有给出预期的 output.Here 是代码
#include <stdio.h>
typedef union{
short count;
float weight;
float volume;
} quantity;
int main()
{
quantity q;
q.count = 4;
q.weight = 1.7;
q.volume = 3.7;
printf("count = %i\tweight = %.2f\tvolume = %2.f\t", q.count, q.weight, q.volume);
}
这是输出
count = -13107 weight = 3.70 volume = 3.70
为什么我得到的计数是负数而重量和体积是相同的浮点数?
一个union
allows to store different data types in the same memory location. You can define a union with many members, but only one member can contain a value at any given time. That is why only the last element you initialized is printed correctly. What you might be looking for is a struct
.
typedef struct {
short count;
float weight;
float volume;
} quantity;
A union
为其每个成员共享内存,因此它一次只能存储其中一个成员。如果您写给一位成员并阅读另一位成员,您会得到其他东西。
如果您希望能够同时保存所有这些值,您需要 struct
。
typedef struct {
short count;
float weight;
float volume;
} quantity;
您一定错过了教科书中的部分,该部分说联合体的所有成员 共享 完全相同的内存,并且所有成员的值将是值上次分配给成员时使用的内存位模式。
由于您最后设置了 volume
成员,因此所有成员都将具有与 float
值相同的内存位模式 3.7
。
并且整数和浮点值在内存中具有不同的位模式,因此 count
的值看起来几乎是随机的或垃圾。
如果您想要三个不同且独立的成员,您需要一个结构而不是联合。
联合是 C 中可用的一种特殊数据类型,它允许将不同的数据类型存储在同一内存位置。您可以定义一个包含许多成员的联合,但在任何给定时间只有一个成员可以包含一个值。
所以如果你想在所有三个变量中存储值,那么你应该使用结构。
typedef struct {
short count;
float weight;
float volume;
}