C数组上的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函数中起作用.在数组打印函数中,它的计算结果为1,而在main中它的计算结果为5.为什么?

所以我想我想知道的是它们是如何不同的?为什么?

这个

void arrayprint(int inarray[])

相当于:

void arrayprint(int *inarray)

所以你得到了机器上int指针的大小.即使你的问题是关于C而你的功能看起来有点不同,它归结为这个C FAQ条目.

所以,在主要的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]));

当然,真正的解决方案是使用向量,因为你使用的是C语言.但我对C不太了解.

相关文章
相关标签/搜索