我已经打印出我的sizeof(array)/sizeof(*array)
并收到了数字3,但是当我将数组传递给我的函数时,它会在存储到变量中时输出2,因此迭代的时间少于它应该的时间。
void printAry(int ary[])
{
int size = sizeof(ary)/sizeof(ary[0]);
cout<<size;//size will print out 2! why?
for(int i = 0; i < size;i++)
{
cout<<ary[i];
}
}
int main() {
int ary[3] = {1,2,3};
cout<<sizeof(ary[0]);
return 0;
}
为什么迭代次数少于预期?
答案 0 :(得分:4)
如果sizeof(ary) / sizeof(ary[0])
是函数参数,则无法使用ary
惯用法,因为它已经衰减成指针类型:sizeof(ary)
仅仅是指向平台上int
的指针的大小。
在C中,您需要显式传递大小信息,或采用特定值表示数组末尾的约定(参见C标准库字符串函数中的'\0'
。)
在C ++中,您可以使用std::vector
。
答案 1 :(得分:4)
原因是数组衰减为指针。
基本上
void printAry(int ary[])
相当于:
void printAry(int* ary)
因此sizeof(ary)
等于系统上指向int
的指针的大小。