用于打印数组的 toString 无法C++工作

toString for printing array is not working C++

本文关键字:无法 C++ 工作 toString 打印 数组 用于      更新时间:2023-10-16

我有一个int array .这个数组的大小是不同的main和在toString方法。

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

这可以通过在函数或过程中添加表示数组大小的 size 参数来解决,如下所示。

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));