sizeof(*ptr) 和 sizeof(struct) 之间的区别

发布于 2024-12-09 20:06:11 字数 446 浏览 0 评论 0原文

我尝试了以下程序

struct temp{
   int ab;
   int cd;
};

int main(int argc, char **argv)
{
   struct temp *ptr1;
   printf("Sizeof(struct temp)= %d\n", sizeof(struct temp));
   printf("Sizeof(*ptr1)= %d\n", sizeof(*ptr1));
   return 0;
}

输出

Sizeof(struct temp)= 8
Sizeof(*ptr1)= 8

在 Linux 中,我在许多地方观察到了 sizeof(*pointer) 的用法。如果两者相同,为什么使用 sizeof(*pointer)

I tried the following program

struct temp{
   int ab;
   int cd;
};

int main(int argc, char **argv)
{
   struct temp *ptr1;
   printf("Sizeof(struct temp)= %d\n", sizeof(struct temp));
   printf("Sizeof(*ptr1)= %d\n", sizeof(*ptr1));
   return 0;
}

Output

Sizeof(struct temp)= 8
Sizeof(*ptr1)= 8

In Linux I have observed at many places the usage of sizeof(*pointer). If both are same why is sizeof(*pointer) used ??

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

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

发布评论

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

评论(2

流绪微梦 2024-12-16 20:06:11

我通常更喜欢 sizeof(*ptr) 因为如果您稍后返回并更改代码,使得 ptr 现在具有不同的类型,则不必更新 <代码>大小。实际上,您可以更改 ptr 的类型,而不会意识到再往下几行,您正在获取结构的大小。如果您没有多余地指定类型,那么当您稍后需要更改它时,搞砸的可能性就较小。

从这个意义上说,它是“可维护性代码”或“防御性代码”之一。

其他人可能有他们的主观原因。通常需要输入的字符较少。 :-)

I generally prefer sizeof(*ptr) because if you later go back and change your code such that ptr now has a different type, you don't have to update the sizeof. In practice, you could change the type of ptr without realizing that a few lines further down, you're taking the structure's size. If you're not specifying the type redundantly, there's less chance you'll screw it up if you need to change it later.

In this sense it's one of those "code for maintainability" or "code defensively" kind of things.

Others may have their subjective reasons. It's often fewer characters to type. :-)

那些过往 2024-12-16 20:06:11

sizeof 以两种方式之一工作:1) 使用类型,2) 使用表达式。后一种情况与对表达式类型调用 sizeof 相同。

所以你可以这样写:

int a;

char p[sizeof(int)];
char q[sizeof a];

两者的意思是一样的。

表达式版本用于声明动态内存指针的实用性在于,您只需拼出类型一次:

complex_type * pc = malloc(sizeof(*pc) * 100); // room for 100 elements

如果您稍后选择更改 *pc 的类型,则只需更改代码集中在一处。

sizeof works in one of two ways: 1) with a type, 2) with an expression. The latter case is identical to calling sizeof on the type of the expression.

So you can write this:

int a;

char p[sizeof(int)];
char q[sizeof a];

Both mean the same thing.

The utility of the expression version for declaring a pointer to dynamic memory is that you only need to spell out the type once:

complex_type * pc = malloc(sizeof(*pc) * 100); // room for 100 elements

If you later choose to change the type of *pc, you only have to change the code in one single place.

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