在C中获取指针的大小

Mat*_*att 18 c pointers sizeof

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

Jon*_*ler 31

给定一个任意类型(我在char这里选择,但这是为了具体的例子):

char *p;
Run Code Online (Sandbox Code Playgroud)

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

sizeof(p)
sizeof(char *)
Run Code Online (Sandbox Code Playgroud)

导致malloc()呼叫如:

char **ppc = malloc(sizeof(char *));
char **ppc = malloc(sizeof(p));
char **ppc = malloc(sizeof(*ppc));
Run Code Online (Sandbox Code Playgroud)

最后一个版本有一些好处,如果ppc更改类型,表达式仍然分配正确的空间.

  • 在某些情况下,`sizeof()`的括号是可选的.在我已经完成的25年以上的C编程中,我从不打算花费精力记住括号何时是可选的以及何时不是; 他们总是正确的,所以我只是拒绝学习什么时候他们是可选的.一致性对我来说更有价值. (20认同)
  • @Kaz:这是不必要的语法?记住带括号的'sizeof(something)`总是正确的,比不需要括号时更容易记住.我认为丢失的括号是C编译器编写者必须处理的陷阱之一,普通的凡人程序员应该永远不必担心. (7认同)
  • 圆括号在第一个表达式中是可选的. (4认同)
  • @CarlNorum是的,但我发现他们澄清了这个表达式.这是一个风格问题,而不是应该编辑的东西. (3认同)
  • 如果您正在回答新手并且您给出了不必要的语法,他们可能会认为这是必需的.如果有人问如何从函数返回一个值,我们应该给它们`return(42);`? (3认同)
  • +1用于标识最后一个版本是首选版本. (2认同)
  • 我喜欢省略括号,以明确我正在评估左值而不是类型的大小. (2认同)

Joh*_*nck 12

这应该做的伎俩:

sizeof(void*)
Run Code Online (Sandbox Code Playgroud)

  • @Bixo:`int main() { return sizeof(void*); }`。 (5认同)