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

时间:2011-10-13 17:17:14

标签: c sizeof

我尝试了以下程序

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)

2 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:1)

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的类型,则只需在一个位置更改代码。