由于我是编程新手,我正在尝试了解有关数组的更多信息。所以我正在研究代码的不同部分,并试图了解三件事:sizeof()
。如何找到数组的长度,以及如何将数组放入函数中(作为参数)?
我的代码是:
#include <iostream>
using namespace std;
void arrayprint(int inarray[])
{
for (int n_i = 0 ; n_i < (sizeof(inarray) / sizeof(int)) ; n_i++)
{
cout << inarray[n_i] << endl;
}
}
int main()
{
int n_array[5];
for (int n_i = 0 ; n_i < (sizeof(n_array) / sizeof(int)) ; n_i++ )
{
cin >> n_array[n_i];
}
arrayprint(n_array);
return 0;
}
似乎 sizeof(inarray)/sizeof(int)
在 main 函数中起作用,但在 arrayprint 函数中不起作用。在数组 print 函数中,它的计算结果为 1,而在 main 函数中,它的计算结果为 5。为什么?
所以我想我想知道的是它们有何不同?为什么?
最佳答案
这个
void arrayprint(int inarray[])
相当于:
void arrayprint(int *inarray)
因此,您将获得机器上 int 指针的大小。即使您的问题是关于 C++ 并且您的函数看起来有点不同,它也可以归结为 C FAQ条目。
所以,在main
内部n_array
实际上是一个真正诚实的数组。但是当传递给函数时,它会“衰减”为指针。而且没有办法知道实际尺寸。您所能做的就是向您的函数传递额外的参数。
void arrayprint(int inarray[], int len)
{
for (int n_i = 0 ; n_i < len; n_i++)
/* .... */
并这样调用它:
arrayprint(n_array, sizeof(n_array) / sizeof(n_array[0]));
当然,真正的解决方案是使用 vector
,因为您使用的是 C++。但我对 C++ 了解不多。
关于c++ - C++ 数组上的 Sizeof() 在一个函数中起作用,但在另一个函数中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6657130/