2 D阵列的大小

时间:2013-11-08 15:53:11

标签: c sizeof

int array[][2] = {
{1,0}, 
{2,2},
{3,4},
{4,17}
};

int main()
{
    /* calculate array size */

    printf(" => number of positions to capture : %d", (int)(sizeof(array)/sizeof(array[0])));
    func(array);
    return 0;
}
void func(int actu[][2])
{
    /* calculate array size */
    printf(" => number of positions to capture : %d", (int)(sizeof(actu)/sizeof(actu[0])));
 }

结果:

 => number of positions to capture : 4 -- inside main
 => number of positions to capture : 0 -- inside func -- I believe I should get 4 here too

调用和被调用函数中相同数组的大小给出了不同的值。请帮助我找到问题。

2 个答案:

答案 0 :(得分:3)

看看herehere(注意第一个链接是在谈论C ++,而不是C,所以虽然机制是相同的,但在C中没有引用这样的东西({{ 1}}))。数组已衰减为指针,因此&不等于sizeof(actu)

答案 1 :(得分:2)

这是因为当数组作为函数参数传递时,它们将转换为指向第一个元素的指针。

所以在main中,sizeof(array)/sizeof(array[0])给出了数组的长度4,正如您所期望的那样。

func中,sizeof(actu)是指针的大小,通常是32位机器中的4个字节或64位机器中的8个字节,而sizeof(actu[0]仍然是两个{{ 1}},如果int是4个字节,则为8。在您的机器中,指针是4个字节,因此整数除法int输出4/8