【问题标题】:Passing array as arguments in C++ [duplicate]在C ++中将数组作为参数传递[重复]
【发布时间】:2013-07-24 12:05:43
【问题描述】:

我尝试在 C++ 中将 C++ 数组作为参数传递,但遇到了一些问题。我通过this 仍然无法解决问题。

C++
#include<iostream>
using namespace std;

void comb(int a[])
{
    int alen = sizeof(a)/sizeof(*a);
    cout << alen << endl;
    /* Since 'I' know the size of a[] */
    for(int i = 0; i < 7; i++)
    cout << a[i] << " ";
    cout << endl;
}

int main()
{ 
    int a[] = {1,2,3,4,5,6,7};
    comb(a);
}

Output
2
1 2 3 4 5 6 7

我的问题是数组的大小怎么会被计算为 2?

【问题讨论】:

  • 输出怎么是2?
  • 如果指针大小是int大小的两倍
  • 逻辑不应该是sizeof(a)/sizeof(a[0])吗?
  • @syb0rg,真的没关系。
  • @syb0rg 我正在使用 *a 访问同一个元素

标签: c++


【解决方案1】:

C在内存中不存储数组的长度,所以调用的函数没有办法 知道数组有多长。

sizeof 在编译时被计算,除非你将它应用到一个数组字面量,否则你不会得到数组的长度。

您可能需要考虑通过引用传递std::vector&lt;int&gt;

【讨论】:

    【解决方案2】:

    当您将数组指定为函数参数时,它会降级为指针。所以sizeof(a) 是指针的大小,不是数组的(字节)大小。您需要将长度作为单独的参数传递,或使用类似std::vector 的内容。

    【讨论】:

    • 或者使用模板,或者使用std::array
    • 或数组引用/指针。但 std::vector 应该是默认值。数组的第一条规则是“不要使用数组”。为了完整起见:void comb(int (&amp;a)[7])void comb(int (*a)[7])。如上所述,7 可以用模板推导出来。
    • 谢谢。我已经使用了vector并正确实现了它。
    猜你喜欢
    • 2023-03-03
    • 2023-04-05
    • 1970-01-01
    • 2011-04-07
    • 2017-02-12
    • 2017-03-19
    • 2011-12-30
    • 2010-10-20
    相关资源
    最近更新 更多