获取C中指针的大小

获取C中指针的大小,c,pointers,sizeof,C,Pointers,Sizeof,如何使用sizeof获取C中指针的大小?我想要malloc一些内存来存储指针(而不是指向的值)。这应该可以做到: sizeof(void*) 给定任意类型(我在这里选择了char,但这是为了具体示例): 您可以使用以下任一表达式: sizeof(p) sizeof(char *) 导致调用malloc(),例如: char **ppc = malloc(sizeof(char *)); char **ppc = malloc(sizeof(p)); char **ppc = malloc(s

如何使用
sizeof
获取C中指针的大小?我想要malloc一些内存来存储指针(而不是指向的值)。

这应该可以做到:

sizeof(void*)
给定任意类型(我在这里选择了
char
,但这是为了具体示例):

您可以使用以下任一表达式:

sizeof(p)
sizeof(char *)
导致调用malloc(),例如:

char **ppc = malloc(sizeof(char *));
char **ppc = malloc(sizeof(p));
char **ppc = malloc(sizeof(*ppc));
最后一个版本有一些好处,即如果
ppc
的类型发生变化,表达式仍会分配正确的空间

char *ptr;
char **ptr2 = malloc(sizeof(ptr));

应该能够达到你的目的。无论平台是什么,此代码都应该工作

第一个表达式中的括号是可选的。@CarlNorum True,但我发现它们在很大程度上澄清了表达式。这是风格的问题,不应该编辑。在某些情况下,
sizeof()
上的括号是可选的。在我25年以上的C编程生涯中,我从来没有费心去记住括号何时是可选的,何时不是可选的;它们总是正确的,所以当它们是可选的时,我只是拒绝学习。一致性对我来说更有价值。@Kaz:不必要的语法是什么?记住带括号的“sizeof(something)`总是正确的,这比记住不需要括号时要容易得多。我认为缺少括号是C编译器编写人员必须处理的陷阱之一,普通普通程序员不必担心。我喜欢省略括号,以表明我在计算左值的大小,而不是类型。AFAIK,指向不同类型的指针不能保证大小相同。真的吗?你能提供一个例子/来源吗?我一直假设所有指针都有相同的大小,因为它们都指向同一地址空间中的内存位置。@Matt:一个简单的反例是函数指针;这不一定是相同的地址空间。另请参见:。标准C要求指向对象的指针大小都相同,但不要求指向函数的指针大小与指向对象的指针大小相同(请记住80286和小型、中型、大型、大型内存模型等)。POSIX要求指向函数的指针的大小与指向对象的指针的大小相同。@JonathanLeffler:对于“指向对象的指针的大小都相同”您是否有一个特定的标准引用?
char *ptr;
char **ptr2 = malloc(sizeof(ptr));