将整数数组传递给函数时,在计算元素数时获得不同的结果

时间:2019-04-10 07:26:51

标签: c++

我只是想获取整数数组中的元素数。以下是代码:

dat <- structure(list(group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("A", 
"B"), class = "factor"), criterium = c(NA, TRUE, TRUE, TRUE, 
FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, NA, FALSE, 
TRUE, TRUE, TRUE, FALSE)), class = "data.frame", row.names = c(NA, 
-18L))

以下是输出。它是相同的数组,但是当我计算main中的大小时,会得到正确的输出。当我将数组传递给函数并进行计算时,我得到了其他结果。

没有元素= 9

9 8 7 6 5 4 3 2 1

没有元素数= 35182156444984

程序以退出代码0结束

1 个答案:

答案 0 :(得分:5)

对于参数,数组作为 pointers 传递给数组的第一个元素。即使使用例如int arr[]。编译器将其视为int *arr

这意味着&arr是指向该指针的指针 ,而不是指向该数组的指针。

如果您希望函数知道数组的大小,则应始终将其作为参数传递。

或者,由于您使用的是C ++,因此可以使用std::arraystd::vector代替纯C样式的数组。

或者使用模板以能够自动推断出数组大小(也可用于std::array)将引用传递给数组。

所以我的建议是你做类似的事情

template<size_t N>
void PrintArrayAndSize(std::array<int, N> const& arr)
{
    for (auto value : arr)
        std::cout << value << '\n';

    std::cout << "Array size is " << arr.size() << '\n';
}

int main()
{
    std::array<int, 9> a = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
    PrintArrayAndSize(a);
}