【问题标题】:C++ array gives me garbage value [duplicate]C ++数组给了我垃圾值[重复]
【发布时间】:2015-07-27 18:19:13
【问题描述】:

刚开始学习c++,来到Arrays。所以我想做的是对传入function的数组执行一些函数。所以为此我尝试了一个小例子

#include <iostream>
using namespace std;

void printArray(int data[]){
  cout<<"len is :"<< sizeof(data)<<endl;
  for(int i = 0 ;i<sizeof(data); i++){
     cout<<data[i]<<" ";
  }
  cout<<endl;
 }

int main() {
  int data[] = {1,2,3,4,5,6};
  printArray(data);
  cout<<"in main :"<<sizeof(data)<<endl;
  for(int i = 0 ;i<sizeof(data); i++){
        cout<<data[i]<<" ";
    }
  return 0;
}

以下是我从代码中得到的输出

 len is :8
 1 2 3 4 5 6 738192384 -1126994503 
 in main :24
 1 2 3 4 5 6 738192384 -1126994503 0 0 -1061892411 32677 0 0 -1665163256 32766 0 1 4196851 0 0 0 463403231 1946389667  

我不明白流程哪里出错了。或者是我的代码中的某些东西使这些奇怪的变化发生。并且sizeof() 为同一个数组提供了两个值。请纠正我在任何地方的错误。

我正在使用添加了 c++ 插件的 Eclipse 软件。

提前感谢您的帮助!

【问题讨论】:

  • sizeof(data) 不会像您认为的那样做。您需要将实际数组大小作为参数传递给函数,没有其他方法可以做到。
  • 如果你刚开始学习 C++,我建议你阅读向量并使用它们而不是数组。
  • @dhavenith 好的,谢谢建议
  • @SurajPalwe in Function void printArray(int data[]) data 被视为指针,当您执行 sizeof() 时,它会为您提供指针的大小。在main() 中,当您使用sizeof() 时,它会为您提供分配给data 的字节数。而且您的循环运行了很多次,因此是垃圾值。要获取元素的数量,可以使用 int num_ele = sizeof(data)/sizeof(data[0]);要获取函数中元素的数量,您必须将大小与数组一起传递。

标签: c++ arrays garbage


【解决方案1】:

sizeof 如果以这种方式将数组传递给函数,则不起作用。尝试使用数组传递大小或传递数组的开始和结束指针。

如果你不介意模板,可以通过引用传递数组:

template<unsigned length>
void printArray(int (&data)[length]) {
    //length is the length of data   
}

【讨论】:

    猜你喜欢
    • 2015-02-28
    • 2020-09-18
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    相关资源
    最近更新 更多