为什么空结构在 C++ 中的大小为 1 个字节,而在 C 中为 0 个字节
结构体是 C/C++ 中用户定义的数据类型。结构创建了一种数据类型,可用于将可能不同类型的项目分组为单一类型。 'struct' 关键字用于创建结构。创建结构的一般语法如下所示:
句法-
struct structureName{
member1;
member2;
member3;
.
.
.
memberN;
};
C++ 中的结构可以包含两种类型的成员:
- 数据成员——这些成员是普通的 C++ 变量。可以在 C++ 中使用不同数据类型的变量创建结构。
- 成员函数——这些成员是普通的 C++ 函数。与变量一起,函数也可以包含在结构声明中。
问题陈述:为什么空结构的大小在 C++ 中不为零,而在 C 中为零。
解决方案:
下面是一个空结构的 C 程序:
C
// C program with an empty
// structure
#include
// Driver code
int main()
{
// Empty Structure
struct empty {
};
// Initializing the Variable
// of Struct type
struct empty empty_struct;
// Printing the Size of Struct
printf("Size of Empty Struct in C programming = %ld",
sizeof(empty_struct));
}
C++
// C++ program to implement
// an empty structure
#include
using namespace std;
// Driver code
int main()
{
// Empty Struct
struct empty {
};
// Initializing the Variable
// of Struct type
struct empty empty_struct;
// Printing the Size of Struct
cout << "Size of Empty Struct in C++ Programming = " << sizeof(empty_struct);
}
输出
Size of Empty Struct in C programming = 0
下面是一个空结构的 C++ 程序:
C++
// C++ program to implement
// an empty structure
#include
using namespace std;
// Driver code
int main()
{
// Empty Struct
struct empty {
};
// Initializing the Variable
// of Struct type
struct empty empty_struct;
// Printing the Size of Struct
cout << "Size of Empty Struct in C++ Programming = " << sizeof(empty_struct);
}
输出
Size of Empty Struct in C++ Programming = 1
如果仔细观察,相同的代码在 C 和 C++ 中执行,但两种情况下的输出不同。让我们来讨论这背后的原因——
- C++ 标准不允许大小为 0 的对象(或类)。这是因为这将使两个不同的对象具有相同的内存位置成为可能。这就是为什么即使是空类和结构体的大小也必须至少为 1 的概念背后的原因。众所周知,空类的大小不为零。一般为1个字节。 C++ 结构也遵循与 C++ 类相同的原则,即 C++ 中的结构也不会是零字节。最小大小必须为 1 个字节。
- 在 C/C++ 中创建空结构是违反语法约束的。但是,GCC 允许 C 中的空结构作为扩展。此外,如果结构没有任何命名成员,则行为未定义,因为:
C99 says-
If the struct-declaration-list contains no named members, the behavior is undefined.
这意味着-
// Constraint Violation
struct EmptyGeeksforGeeks {};
// Behavior undefined,
// since there is no named member
struct EmptyGeeksforGeeks {int :0 ;};
想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解基础加 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程。