typedef union{ long i; int k[5]; char c; } DN; strcat da { int cat; DN co; double dog; }too; DN dn; printf ("%d",sizeof(struct da)+sizeof(dn));
时间: 2023-07-15 20:12:43 浏览: 67
这段代码有一些问题,我来解释一下。
首先,代码中定义了一个名为 `DN` 的联合体,包含了三个成员变量:一个 long 型的整数 `i`,一个包含 5 个 int 型元素的数组 `k`,以及一个 char 型的变量 `c`。
接着定义了一个名为 `too` 的结构体,包含了三个成员变量:一个 int 型的变量 `cat`,一个 `DN` 类型的联合体变量 `co`,以及一个 double 型的变量 `dog`。
最后定义了一个名为 `dn` 的 `DN` 类型的联合体变量。
在 `printf` 函数中,计算了 `struct da` 和 `dn` 所占内存总和的大小,并输出了结果。
但是这段代码中有几个问题:
1. `strcat da` 是不完整的函数声明,应该写成 `void strcat_da()` 或者 `void strcat_da(char *s1, const char *s2)` 等形式。
2. `struct da` 是没有定义的结构体类型,应该将 `too` 替换为 `struct da` 才能正确计算出它的大小。
3. `DN dn` 这行代码是多余的,因为在计算大小时并没有使用到 `dn` 变量。
所以,如果你想计算出 `struct da` 和 `DN` 所占内存总和的大小,可以修改代码如下:
```
#include <stdio.h>
typedef union {
long i;
int k[5];
char c;
} DN;
struct da {
int cat;
DN co;
double dog;
} too;
int main() {
printf("%d", sizeof(struct da) + sizeof(DN));
return 0;
}
```
这样就能正确输出结果了。