c++ - C++ 数组上的 Sizeof() 在一个函数中起作用,但在另一个函数中不起作用

标签 c++ arrays sizeof

由于我是编程新手,我正在尝试了解有关数组的更多信息。所以我正在研究代码的不同部分,并试图了解三件事: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/

相关文章:

c - c中sizeof运算符的大小是多少?

c++ - 使用以数组为键的 unordered_map

javascript - 未捕获的类型错误 : Cannot read property 'draw' of undefined

将整数或 double 加在一起时的 C++ 奇怪输出

java - 从数组中获取最后一个元素

c - 指向指针的指针数组如何工作?

c - 与使用 SIZEOF 运算符计算的结果不同?

c++ - Sizeof 在模板中失败,即使类型都已定义

c++ - Windows 中用于生物特征身份验证的凭据提供程序

c++ - 当编译时已知引用占用结构中的空间时,是否错过了优化?