typedef union { long i; int k[5]; char c; } DATA;啥意思
时间: 2024-05-20 15:14:31 浏览: 8
这是一个联合体(union),它包含三个成员变量:一个长整型 i、一个整型数组 k 和一个字符型 c,它们共用同一块内存空间。因为联合体中所有成员变量的起始地址都相同,所以修改一个成员变量的值会影响到其他成员变量的值。其中,i 和 k[0] 指向的是同一块内存,因为它们的大小相等;k[0] 到 k[4] 共占用 20 个字节,因此 k 数组的大小为 5 个整型,而不是 5 个字节。当联合体中的某个成员变量被修改时,其他成员变量的值会被覆盖。因此,在使用联合体时需要注意成员变量的修改顺序以及对应的数据类型。
相关问题
typedef long long int ll
这是一个C++中的typedef语句,将long long int类型定义为ll类型,方便在代码中使用。例如:
```
typedef long long int ll;
ll x = 123456789;
```
相当于
```
long long int x = 123456789;
```
typedef union { long i; int k[5]; char c;} DN;struct da { int cat; DN co; double dog;} too;int main() { printf("%lu\n", sizeof(struct da) + sizeof(DN)); return 0;}
这段代码的作用是计算 `struct da` 和 `DN` 的总大小,并将其打印出来。
首先,`DN` 是一个联合体,它包含一个长整型 `i`、一个整型数组 `k` 和一个字符型 `c`,这意味着 `DN` 的大小是这三个成员中最大的那个,即 `long` 的大小。因此,`sizeof(DN)` 的值应该是 `sizeof(long)`,在 64 位系统上通常是 8。
接下来,`struct da` 包含一个整型 `cat`、一个 `DN` 类型的联合体 `co` 和一个双精度浮点型 `dog`,它的大小应该是 `sizeof(int) + sizeof(DN) + sizeof(double)`。由于 `DN` 的大小已经计算过了,所以我们只需要知道 `int` 和 `double` 的大小,它们分别是 4 和 8。
因此,`sizeof(struct da) + sizeof(DN)` 的值应该是 `4 + 8 + sizeof(long)`,即 20(在 64 位系统上)。所以这段程序应该输出 20。