【问题标题】:toString for printing array is not working C++ [duplicate]用于打印数组的 toString 不起作用 C++ [重复]
【发布时间】:2017-10-29 05:56:07
【问题描述】:

我有一个int array。这个数组的大小不同是maintoString 方法。

void toString(int arr[]){
    int size = sizeof(arr)/sizeof(arr[0]);
    cout<<"Size in toString  "<<size<<endl;
    cout<<"{";
    for(int i=0; i<size; i++){
        cout<<arr[i]<<", ";
    }
    cout<<"}"<<endl;
}

int main(){
    int input_arr[] = {1, 2, 3, 4};
    int size_in_main = sizeof(input_arr)/sizeof(input_arr[0]);
    cout<<"Size in main      "<<size_in_main<<endl;
    toString(input_arr);
    return 0;
}

输出:

Size in main      4
Size in toString  2
{1, 2, }

为什么打印不同的数组大小?

【问题讨论】:

标签: c++ arrays size tostring


【解决方案1】:

作为参数传递的指针没有大小信息。 您必须添加大小作为参数。

【讨论】:

  • 但为什么总是显示大小为 2。为什么不是一些随机数。?
  • 我预计 1. 不知道。
  • 可能的解释是:64 位系统上的指针被分配 8 个字节,而 arr[0] 的大小为 4,因此 8/4=2。
【解决方案2】:

在 C++ 中,将数组传递给过程或函数调用不会在数组内部创建数据的本地副本,而是提供指向数据数组的指针(通过引用传递)。因此,sizeof(arr) 将返回 'int *' 的大小,而不是 'int []'。

这可以通过向您的函数或过程添加一个表示数组大小的大小参数来解决。

void toString(int arr[], int arr_size){
    int size = arr_size/sizeof(arr[0]);
    cout<<"Size in toString  "<<size<<endl;
    cout<<"{";
    for(int i=0; i<size; i++){
        cout<<arr[i]<<", ";
    }
    cout<<"}"<<endl;
}

然后可以这样调用

toString(input_arr, sizeof(input_arr));

【讨论】:

  • 你的意思是int size = arr_size/sizeof(arr[0]);
  • 刚刚意识到我粘贴了错误的行 - 谢谢
猜你喜欢
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 2020-02-01
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
相关资源
最近更新 更多