用于打印数组的 toString 不工作 C++
toString for printing array is not working C++
我有一个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) 将 return '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 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) 将 return '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));