为什么我的数组大小不是 C 中的 4 个字节

Why isn't the size of my array 4 bytes in C

char foo[3] = { 97, 98, 97 };
printf("%d",sizeof(foo));

调试后结果为 3。

为什么结果不是4?

foo[3] 由 4 个字符 0,1,2,3 组成,对吗?

char 的大小是 1 个字节,为什么 foo 不是 4 个字节?

为什么结果不是1?

当我调用 foo 时,它与调用 &foo[0] 相同。 那么我怎么知道什么时候调用整个数组以及什么时候调用第一个字符呢?喜欢这里 sizeof(foo)

我认为您对数组大小和数组索引感到困惑。如果用行 char a[3]; 声明一个大小为 3 的数组 a,它包含三个元素,这些元素被访问为 a[0]a[1]a[2].这些是数组中唯一存在的元素。 a[3] 会出界。

foo[3] consists of 4 characters 0,1,2,3 right?

没有。 charfoo 的数组包含三个元素:foo[0], foo[1], foo[2]。由于 char 的大小始终为 1(不一定是字节!),因此三个字符的数组的大小为 3。

关于你的第二个问题,this这个问题可能会有所启发。

好的,我一次回答这个问题...

为什么sizeof(foo)4的结果不是?

这是因为您在第一条语句char foo[3]中只将foo数组的大小设置为3。当您明确将边界定义为 3 chars 即 3 个字节时,没有理由期望 4 作为结果。

为什么结果不是1?

您说得对 在某些情况下,调用 foo&foo[0] 相同。这些情况中与您的问题最相关的是当作为参数传递给函数的指针时。在 sizeof 函数的情况下,当您传入 foo 数组指针时,函数遍历与该参数指针关联的内存块和 returns 总大小,因此 不是1