sizeof() 应用于结构体和变量

发布于 2024-12-03 19:58:58 字数 215 浏览 0 评论 0原文

考虑以下代码片段:

struct foo {
  int a;
  int b;
  int c;
};

struct foo f;
printf("%u, %u\n", sizeof(struct foo), sizeof(f));

代码返回相同的值,但我想知道应用于变量的 sizeof() 是否正确,或者这只是巧合?

谢谢。

consider the following snippet:

struct foo {
  int a;
  int b;
  int c;
};

struct foo f;
printf("%u, %u\n", sizeof(struct foo), sizeof(f));

The code returns the same values, but I was wondering if sizeof() applied to variable is correct or this is just coincidence?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

記憶穿過時間隧道 2024-12-10 19:58:58

两者都将并且确实应该返回相同的值。

来自 MSDN:

运算符的大小
sizeof 运算符给出存储操作数类型的对象所需的存储量(以字节为单位)。该运算符允许您避免在程序中指定与机器相关的数据大小。

sizeof unary-expression  
sizeof ( type-name )

Both will and should indeed return the same value.

From MSDN:

The sizeof Operator
The sizeof operator gives the amount of storage, in bytes, required to store an object of the type of the operand. This operator allows you to avoid specifying machine-dependent data sizes in your programs.

sizeof unary-expression  
sizeof ( type-name )
臻嫒无言 2024-12-10 19:58:58

sizeof 适用于类型表达式。当您将其应用于类型时,()sizeof 语法的一部分:sizeof(type)。当您将其应用于表达式时,() 不是 sizeof 语法的一部分:sizeof expression

因此,您的第二个 sizeof 并不是真正“应用于变量”。它应用于表达式(f)。该表达式由一个包含在一对冗余的 () 中的单个变量 f 组成。您也可以不使用冗余的 () 对,而仅使用 sizeof f

sizeof应用于表达式时,它返回表达式结果的大小(即表达式所具有的类型的大小)。在您的示例中,sizeof 的两个应用程序都保证计算出相同的值。

事实上,一个好的编程习惯是尽可能避免使用sizeof(type),即更喜欢使用sizeof表达式。这使您的代码更加独立于类型,这总是一件好事。类型名称属于声明而不是其他地方。

sizeof works with types and expressions. When you apply it to a type, the () are part of sizeof syntax: sizeof(type). When you apply it to an expression () are not part of sizeof syntax: sizeof expression.

So your second sizeof is not really "applied to a variable". It is applied to an expression (f). That expression consists of a single variable f enclosed into a redundant pair of (). You could also do without that redundant pair of () and use just sizeof f.

When sizeof is applied to an expression, it returns the size of the expression result (i.e. the size of the type that expression has). In your example both applications of sizeof are guaranteed to evaluate to the same value.

In fact, a good programming practice is to avoid sizeof(type) as much as possible, i.e. prefer to use sizeof expression. This makes your code more type-independent, which is always a good thing. Type names belong in declarations and nowhere else.

情绪 2024-12-10 19:58:58

这正如预期的那样,即两者将返回相同的值。该值是在编译时计算的。

sizeof 中使用变量通常是一个好习惯,因为您稍后可能会更改类型,因此大小也可能会更改。

This is as expected, i.e. both will return the same value. This value is calculated at compile-time.

It's usually a good practice to use the variable in sizeof as you might later change the type and thus the size might change as well.

千笙结 2024-12-10 19:58:58

一般来说,最好将其应用于变量。如果变量的类型发生变化,它将保持正确。

In general it is preferable to apply it to the variable. It will then remain correct if the type of the variable changes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文