C++ 程序的输出 |第 41 组(结构和联合)
先决条件:结构和联合
QUE.1 这段代码的输出是什么?
#include
using namespace std;
typedef struct s1 {
int a;
float b;
union g1 {
char c;
double d;
};
} new1;
int main()
{
cout << sizeof(new1);
return 0;
}
(一)17
(b)16
(c)8
(d)9
输出:
(c) 8
说明:在 Struct 块中,它添加了 float 和 int 的大小,因此大小为 8,然后在 union 中,它仅声明但未初始化,因此在输出中给出了 8。
QUE.2 这个问题的输出是什么?
#include
using namespace std;
typedef struct s1 {
int a;
float b;
union g1 {
char c;
double d;
} new2;
} new1;
int main()
{
cout << sizeof(new1);
}
(一)17
(b)16
(c)8
(d)9
输出:
(b)16
说明:在 Struct 块中,它添加了 float 和 int 的大小,因此大小为 8 然后在 union 中,我们在此块中定义和声明两者,因此 union 给出 8,因此它在输出中给出 16。
QUE.3 这个问题的结果是什么?
#include
using namespace std;
typedef struct s1 {
int a;
float b;
union g1 {
double c;
double d;
} new2;
} new1;
int main()
{
cout << sizeof(new1) << endl;
new1 obj;
obj.new2.d = 17;
obj.new2.c = 20;
cout << obj.new2.d;
return 0;
}
(一)17 20
(b)16 20
(c)16 17
(d)24 20
输出:
(b) 16 20
解释:在这个问题中:在联合中,块包含最大大小的数据类型,如 double 所以内存包含 8 个字节,当我们初始化 'd' 和 'c' 时,'d' 值被 'c' 替换,因为内存块是相同的所以当我们打印 'd' 和 'c' 值时,它会打印 20 和我在上面的例子中解释的大小,所以它会打印 16。
QUE.4 这个问题的结果是什么?
#include
using namespace std;
typedef struct s1 {
int a;
float b;
struct g1 {
double c;
double d;
};
} new1;
int main()
{
cout << sizeof(new1) << endl;
return 0;
}
(一)8
(b)16
(c)4
(d)24
输出:
(a)8
说明:在 Struct 块中,它添加了 float 和 int 的大小,因此大小为 8,然后在 struct g1 块中,它仅声明但未初始化,因此总体而言它在输出中给出了 8。
QUE.5 这个问题的结果是什么?
#include
using namespace std;
typedef struct s1 {
int a;
float b;
struct g1 {
double c;
double d;
} new2;
} new1;
int main()
{
cout << sizeof(new1) << endl;
return 0;
}
(一)8
(b)16
(c)4
(d)24
输出:
(d)24
说明:在 Struct 块中,它添加了 float 和 int 的大小,因此大小为 8,然后在 struct g1 块中,当时它被声明和初始化,因此它添加了“c”和“d”的大小,因此包含总大小为 24输出为 24。
相关文章 :
- C 程序的输出 |第 44 组(结构和联合)
- 结构与联合测验
- C 结构和 C++ 结构的区别