首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sizeof(*ptr)和sizeof(struct)之间的差异

sizeof(*ptr)和sizeof(struct)之间的差异
EN

Stack Overflow用户
提问于 2011-10-14 01:17:14
回答 2查看 6.6K关注 0票数 4

我尝试了下面的程序

代码语言:javascript
复制
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;
}

输出

代码语言:javascript
复制
Sizeof(struct temp)= 8
Sizeof(*ptr1)= 8

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-14 01:18:59

我通常更喜欢sizeof(*ptr),因为如果您稍后返回并更改代码,使ptr现在具有不同的类型,则不必更新sizeof。在实践中,您可以更改ptr的类型,而不会意识到再往下几行,就会占用结构的大小。如果您没有冗余地指定类型,那么如果您以后需要更改它,您就不太可能搞砸它。

从这个意义上说,它是那种“可维护性代码”或“防御性代码”之类的东西。

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

票数 15
EN

Stack Overflow用户

发布于 2011-10-14 01:20:18

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

所以你可以这样写:

代码语言:javascript
复制
int a;

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

两者的含义是一样的。

用于声明指向动态内存的指针的表达式版本的实用程序是,您只需拼写该类型一次:

代码语言:javascript
复制
complex_type * pc = malloc(sizeof(*pc) * 100); // room for 100 elements

如果您稍后选择更改*pc的类型,则只需在一个位置更改代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7757870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档