代码之家  ›  专栏  ›  技术社区  ›  Rahul

用于打印数组的toString无法使用C++[重复]

  •  0
  • Rahul  · 技术社区  · 8 年前

    我有一个 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, }
    

    为什么打印的阵列大小不同?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Joe Sonderegger    8 年前

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

        2
  •  1
  •   Richard Denton    8 年前

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