我只是在尝试一个示例,当在<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
答案 0 :(得分:7)
这是因为sizeof
返回类型的大小,按照C11 6.5.3.4 The sizeof and _Alignof operators /2
(我的重点):
sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的括号名称。大小由操作数的 类型 确定。
在同一标准中,&a
涵盖了a
是int
的{{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
打印结果。