为什么我迭代次数少于预期?

时间:2017-01-11 17:26:02

标签: c++ c arrays

我已经打印出我的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;
 }

为什么迭代次数少于预期?

2 个答案:

答案 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的指针的大小。