【问题标题】:Why is the code that works correctly in Main works incorrectly inside the function ? (C++) [duplicate]为什么在 Main 中正常运行的代码在函数内部运行不正确? (C++)[重复]
【发布时间】:2020-12-07 21:10:29
【问题描述】:

我正在尝试使用以下代码查找数组的长度,但是当我尝试在函数内部运行它时,它无法正常工作。

int nums1 []={1,2,3,4,5,6,7,8,9,10};
const int len1=sizeof(nums1)/sizeof(nums1[0]);

当我将nums1 传递给函数然后尝试查找nums1 的长度时,相同的代码无法正常工作。

这是我的代码以及我得到的结果:

【问题讨论】:

  • 这能回答你的问题吗? size of array passed to C++ function?
  • 我不是 C++ 程序员。但是你的函数的输入不应该是一个数组指针,而不仅仅是一个 int 指针吗?
  • Edit 包含代码的问题作为文本,而不是图像。见How to Ask
  • @Sandsten 将数组传递给函数时,它会衰减为指针。在这种情况下,int 数组衰减为 int*

标签: c++


【解决方案1】:

重写两个例子

const int len1 = sizeof(int[10]) / sizeof(int)

const int len2 = sizeof(int*) / sizeof(int);

第一个采用 int array 的大小,而第二个采用 int pointer 的大小。在您的体系结构中,一个 int 的长度为 4 个字节,因此 10 个 int 的数组的长度为 40 个字节。另一边的指针,在这个架构上占用 8 个字节(很可能是 64 位)。

【讨论】:

  • 感谢您的回答。
【解决方案2】:

指针的大小与数组的大小不同,指针可能指向。当您将数组传递或分配给指针时,它会衰减为指向第一个元素的指针。而且 C++ 编程语言(就像 C 一样)没有隐含的机制来传达这种衰减的大小。

您必须明确指定元素的数量作为函数的附加参数。或者直接使用std::vector

【讨论】:

  • 我知道了,非常感谢您的回答。
猜你喜欢
  • 2019-03-12
  • 2023-03-24
  • 2019-02-06
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 2020-05-04
相关资源
最近更新 更多