1. 空结构体占一个字节空间
#include<iostream>
using namespace std;
#define STRUCT StructNull
#define STRUCT1(R) #R
#define STRUCT2(R) STRUCT1(R)
struct STRUCT
{
};
int main()
{
cout << "sizeof(" STRUCT2(STRUCT) ") = " << sizeof(STRUCT) << endl;
return 0;
}
2. 结构体中包含数组则不占用空间
- 结构体中只含有一个char类型的数组,输出大小为0
#include<iostream>
using namespace std;
#define STRUCT String
#define STRUCT1(R) #R
#define STRUCT2(R) STRUCT1(R)
struct STRUCT
{
char buf[];
};
int main()
{
cout << "sizeof(" STRUCT2(STRUCT) ") = " << sizeof(STRUCT) << endl;
return 0;
}
- 结构体中含有两个int类型和一个char类型的数组,输出大小为8,刚好是两个int的大小
#include<iostream>
using namespace std;
#define STRUCT String
#define STRUCT1(R) #R
#define STRUCT2(R) STRUCT1(R)
struct STRUCT
{
int len;
int cap;
char buf[];
};
int main()
{
cout << "sizeof(" STRUCT2(STRUCT) ") = " << sizeof(STRUCT) << endl;
return 0;
}
3. 结构体中的成员函数不占用空间
#include<iostream>
using namespace std;
#define STRUCT String
#define STRUCT1(R) #R
#define STRUCT2(R) STRUCT1(R)
struct STRUCT
{
int len;
int cap;
char buf[];
void empty();
};
int main()
{
cout << "sizeof(" STRUCT2(STRUCT) ") = " << sizeof(STRUCT) << endl;
return 0;
}
4. 结构体中的一个或多个虚函数只占用一个指针大小的空间
#include<iostream>
using namespace std;
#define STRUCT String
#define STRUCT1(R) #R
#define STRUCT2(R) STRUCT1(R)
struct STRUCT
{
int len;
int cap;
char buf[];
void empty();
virtual void vtf1();
virtual void vtf2();
};
int main()
{
cout << "sizeof(" STRUCT2(STRUCT) ") = " << sizeof(STRUCT) << endl;
return 0;
}