在sizeof()运算符中作为操作数地址

时间:2018-07-03 06:22:36

标签: c sizeof

我只是在尝试一个示例,当在<h1>Todos</h1> <todo class="tddiv"></todo> <input type="text" class="todo" placeholder="type here"> <form class="todo-form"> <input type="text" placeholder="input-todo-text" name="addTodo"> <button>Submit Text</button> </form> <script src="script.js"></script>中将地址作为参数传递时,我试图检查输出 运算符,我得到4的输出。现在我的问题是,当您在sizeof运算符中传递指针时,为什么实际上没有指针变量时它只显示4个字节的内存,而只是一个地址?

sizeof

2 个答案:

答案 0 :(得分:7)

这是因为sizeof返回类型的大小,按照C11 6.5.3.4 The sizeof and _Alignof operators /2(我的重点):

  

sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的括号名称。大小由操作数的 类型 确定。

在同一标准中,&a涵盖了aint的{​​{1}}的类型:

  

一元6.5.3.2 Address and indirection operators /3运算符产生其操作数的地址。 如果操作数的类型为“ type”,则结果的类型为“ pointer to type”。

换句话说,&在功能上等同于int a; sizeof(&a)

答案 1 :(得分:4)

sizeof运算符适用于操作数的 type

引用C11,第6.5.3.4章(强调我的

  

sizeof运算符产生其操作数的大小(以字节为单位),可能是   表达式或类型的括号名称。 大小由以下类型决定   操作数。 [....]

&a的类型为int *,因此您的声明与sizeof(int *)相同。结果就是平台中指针的大小(整数)。

也就是说,sizeof会产生一种size_t类型的结果

  • 使用类型为size_t的变量
  • 使用%zu打印结果。