动态查找结构的大小

时间:2014-04-28 11:54:25

标签: c flexible-array-member

有没有办法在C ??

中动态找到结构大小

Sizeof是编译时运算符..那么另一种选择是什么。

如果我们可以在一个结构中动态分配数组(灵活数组),那么动态地找到结构大小也应该在那里.Plz帮助我...

3 个答案:

答案 0 :(得分:1)

当你在C中动态分配数组时,如果你想知道数组的大小,你也必须记住它的大小!

答案 1 :(得分:1)

必须在编译时知道结构大小。

如果它包含一个指向动态分配内存的指针,那么该内存不是结构的一部分 - 它在结构外部而指针指向它 - 所以它不会影响sizeof结构

如果您正在谈论灵活的阵列成员,那么您需要实现自己的方式来了解分配的内存量,例如:有一个包含大小的struct成员变量。

答案 2 :(得分:1)

sizeof的结果是编译时常量,因为变量或结构的大小在运行时不会改变。

唯一的例外是V(ariable)L(ength)数组,代码为它们排除"知道"大小。

参照:

  

我们可以在结构中动态分配数组

所以我们假设:

struct s
{
  size_t size;
  int * ints;
}

尺寸为sizeof(struct s)。这是

的总和
  • 无符号整数的大小:sizeof(size_t)
  • 指向int的指针的大小:sizeof (int *)
  • 一些可选的填充字节

这取决于结构成员int * ints可能指向的字节数。