为什么我的数组大小不是C

时间:2017-01-29 22:02:41

标签: c arrays sizeof

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

调试后给出了3的结果。

为什么结果不是4?

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

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

为什么结果不是1?

当我拨打foo时,它与呼叫&foo[0]相同。 那么我怎么知道我什么时候需要整个数组以及什么时候第一个字符呢?像这里sizeof(foo)

3 个答案:

答案 0 :(得分:0)

我认为你对数组大小和数组索引感到困惑。如果使用行a声明大小为3的数组char a[3];,则它包含三个元素,这些元素将作为a[0]a[1]和{{1}进行访问}。这些是数组中唯一存在的元素。 a[2]将超出范围。

答案 1 :(得分:0)

  

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

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

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

答案 2 :(得分:0)

好的,我会一次提出这个问题......

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

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

为什么结果不是1?

你说在某些情况下是正确的,调用foo&foo[0]相同。这些案例中与您的问题最相关的是作为指针传递给函数作为参数。在sizeof函数的情况下,当您传入foo数组指针时,函数会在与该争论指针关联的整个内存块中迭代并返回总大小,因此1