如何使用 sizeof
在C语言中获取指针的大小?我想要动态分配内存来存储指针本身(而不是所指向的值)。
给定一个任意类型(我选择了char
,但这只是为了举例):
char *p;
你可以使用以下任一表达式:
sizeof(p)
sizeof(char *)
导致像这样的malloc()
调用:
char **ppc = malloc(sizeof(char *));
char **ppc = malloc(sizeof(p));
char **ppc = malloc(sizeof(*ppc));
最新版本的好处在于,如果 ppc
的类型改变,表达式仍会分配正确的空间。
sizeof()
函数的括号是可选的。在我进行了25多年的C编程后,我从未费力去记住括号何时是可选的,何时不是可选的。因为它们总是正确的,所以我拒绝学习何时可以省略它们。对我而言,保持一致性更有价值。 - Jonathan Lefflersizeof(something)
永远是正确的,比记住什么时候不需要括号容易得多。我认为省略括号是C编译器编写者必须处理的陷阱之一,普通程序员永远不应该担心它。 - Jonathan Leffler这应该就可以解决问题了:
sizeof(void*)
int main() { return sizeof(void*); }
。 - John Zwinckchar *ptr;
char **ptr2 = malloc(sizeof(ptr));
无论平台如何,这段代码都应该能够实现你的目的。
char *
通常比这些机器上的int *
更大。这是因为你需要存储你正在寻址的单词的地址以及特定字符的偏移量,而对于整数,你只需要存储单词的地址。当然,我接触过的每台计算机都支持字节寻址... - CoffeeTableEspresso