【问题标题】:Why does the length function return 2? [duplicate]为什么长度函数返回2? [复制]
【发布时间】:2013-07-04 13:11:59
【问题描述】:

我写了一个函数size,它接受整数数组作为参数。

int length(int a[])
{

    return  sizeof(a)/sizeof(int);

}

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

    int len = sizeof(a)/sizeof(int);

    cout << len;  // This correctly prints 10 .

    len =  size(a);

    cout << len;  // But this print 2 .why ??

    return 0;
}

有人可以解释一下这种行为吗? 谢谢。

【问题讨论】:

  • int length(int a[])int length(int* a) 相同。请勿使用该符号,因为如您所见,它具有误导性。
  • @0x499602D2 正好相反。它的大小是 int 的两倍
  • @0x499602D2 64 位指针。
  • @GrijeshChauhan 不一定。很可能是具有 64 位指针、32 位 int 的 64 位系统。或者可能是 60 位指针、30 位整数、10 位字符。你可以只告诉比率指针/int,没有别的

标签: c++ arrays


【解决方案1】:

你得到 2 的原因是因为 sizeof(int *)sizeof(int) 的两倍,并且数组在传递给函数时会衰减为指针。

有多种方法可以解决此问题。在 C++ 中,您可以改用 std::vector&lt;int&gt; a = { ... };,这将解决问题(通过调用 a.size() 来获取大小,因为 sizeof(a) 不起作用)。

【讨论】:

  • 或者将数组传递为int (&amp;)[N]
  • @Mats 你能给我一些关于 std:vector 教程的链接吗?我对此一无所知
  • cplusplus.com/reference/vector/vector 不是一个教程,但也许是一个起点。我确信带有“tutorial C++ vector”的谷歌可能会给你一些其他链接,至少有一些可能是好的——我还没有“学习”C++(至少在那个级别),所以不确定哪里有好的教程网站是。
  • @Thinker 你应该使用一本好的初学者的 C++ 教科书。像std::vector 这样的东西是作为语言一部分的标准库的非常基本的构建块。这是一个基本的 feature double,for 循环等。
【解决方案2】:

因为sizeof(a) 返回的指针大小为 4 字节或 8 字节,具体取决于您的应用是 32 位还是 64 位。因此,您需要使用单独的变量来维护数组的长度。

或者,更好的是,我建议使用标准集合类之一,例如 std::vector,因为它会自动保持长度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2021-12-20
    • 2021-12-22
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多