1
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

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

4

2 回答 2

3

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

于 2013-11-08T15:57:57.613 回答
2

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

因此,如您所料, inmain给出了sizeof(array)/sizeof(array[0])数组的长度。4

in func,sizeof(actu)是指针的大小,在 32 位机器中通常为 4 字节,在 64 位机器中为 8 字节,而sizeof(actu[0]仍然是 2 int,即8ifint为 4 字节。在您的机器中,指针是 4 个字节,所以整数除法4/8输出0.

于 2013-11-08T15:59:52.247 回答