我尝试了下面的程序
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) ??
发布于 2011-10-14 01:18:59
我通常更喜欢sizeof(*ptr),因为如果您稍后返回并更改代码,使ptr现在具有不同的类型,则不必更新sizeof。在实践中,您可以更改ptr的类型,而不会意识到再往下几行,就会占用结构的大小。如果您没有冗余地指定类型,那么如果您以后需要更改它,您就不太可能搞砸它。
从这个意义上说,它是那种“可维护性代码”或“防御性代码”之类的东西。
其他人可能有他们的主观原因。通常需要键入的字符较少。:-)
发布于 2011-10-14 01:20:18
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的类型,则只需在一个位置更改代码。
https://stackoverflow.com/questions/7757870
复制相似问题