我只是想获取整数数组中的元素数。以下是代码:
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结束
答案 0 :(得分:5)
对于参数,数组作为 pointers 传递给数组的第一个元素。即使使用例如int arr[]
。编译器将其视为int *arr
。
这意味着&arr
是指向该指针的指针 ,而不是指向该数组的指针。
如果您希望函数知道数组的大小,则应始终将其作为参数传递。
或者,由于您使用的是C ++,因此可以使用std::array
或std::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);
}