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
调用和被调用函数中相同数组的大小给出了不同的值。请帮助我找到问题。
答案 0 :(得分:3)
答案 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
。