-1

有没有办法在 C 中动态查找结构大小?

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

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

4

3 回答 3

1

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

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

如果您正在谈论灵活的数组成员,那么您将需要实现自己的方式来了解您分配了多少内存,例如拥有一个保存大小的结构成员变量。

于 2014-04-28T12:03:32.507 回答
1

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

唯一的例外是 V(ariable)L(ength)Arrays,定义它们的代码“知道”其大小。

参考:

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

所以让我们假设:

struct s
{
  size_t size;
  int * ints;
}

大小为sizeof(struct s). 那是总和

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

这与结构成员int * ints可能指向的字节数无关。

于 2014-04-28T12:05:29.577 回答
1

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

于 2014-04-28T11:57:50.547 回答