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-11-22 07:52:37 浏览: 21
这段代码的语法是错误的,无法通过编译。
首先,在 `strcat da` 这一行中,缺少了函数返回类型声明。应该将其改为 `void strcat_da()` 或者 `int strcat_da()`
其次,在 `DN dn` 这一行中,缺少了变量名。应该将其改为 `DN dn_var`
最后,在 `printf` 函数中,应该使用 `%ld` 而不是 `%d`,因为 `sizeof` 返回的是 `long` 类型的值。
修正后的代码如下:
```
#include <stdio.h>
#include <string.h>
typedef union {
long i;
int k[5];
char c;
} DN;
void strcat_da() {
int cat;
DN co;
double dog;
}
DN dn_var;
printf("%ld", sizeof(struct da) + sizeof(dn_var));
```
相关问题
typedef union { long i; int k[5]; char c; } DATA;啥意思
这是一个联合体(union),它包含三个成员变量:一个长整型 i、一个整型数组 k 和一个字符型 c,它们共用同一块内存空间。因为联合体中所有成员变量的起始地址都相同,所以修改一个成员变量的值会影响到其他成员变量的值。其中,i 和 k[0] 指向的是同一块内存,因为它们的大小相等;k[0] 到 k[4] 共占用 20 个字节,因此 k 数组的大小为 5 个整型,而不是 5 个字节。当联合体中的某个成员变量被修改时,其他成员变量的值会被覆盖。因此,在使用联合体时需要注意成员变量的修改顺序以及对应的数据类型。
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。