我需要能够显示各种数组的内容(此时用于调试目的),并决定编写一个函数来帮助我。这就是我提出的。 目标是能够显示任何类型的传入数组(int,double等)。 因为我从来没有接受过任何正式的编程培训,所以我想知道我所拥有的是否也是如此,并且不那么优雅"通过对一个优秀的计算机科学人员做一些明显的事情可以改善,但对于一个非专业人士则不然。
int
DisplayArrayInDebugWindow(
void** incoming_array,
char* array_type_str,
int array_last_index_dim_size,
int array_terminator,
HWND handle_to_display_window,
wchar_t* optional_array_name )
{
wchar_t message_bufferw[1000];
message_bufferw[0] = L'\0';
wchar_t temp_buffer[400];
if ( array_last_index_dim_size == 0 ) { array_last_index_dim_size = 1; }
// ----------------------------------------------------------------------------
// Processing for "int" type array
// ----------------------------------------------------------------------------
if ( 0 == (strcmp( array_type_str, "int" )) )
{
int j = 0;
swprintf( temp_buffer, L"%s\r\n", optional_array_name );
wcscat( message_bufferw, temp_buffer );
for ( int i = 0; ((int)(*((int*)( (int)incoming_array + i * (int)sizeof(int) * array_last_index_dim_size + j * (int)sizeof(int))))) != array_terminator; i++ )
{
swprintf( temp_buffer, L"%02i:\t", i );
wcscat( message_bufferw, temp_buffer );
for ( j; j < last_array_dim_size; j++ )
{
swprintf( temp_buffer, L"%i\t", ((int)(*((int*)( (int)incoming_array + i * (int)sizeof(int) * array_last_index_dim_size + j * (int)sizeof(int) )))) ); //
wcscat( message_bufferw, temp_buffer );
}
wcscat( message_bufferw, L"\r\n" );
// --------------------------------------------------------------------
// reset j to 0 each time
// --------------------------------------------------------------------
j = 0;
}
swprintf( temp_buffer, L"\nEnd of Array\n" );
wcscat( message_bufferw, temp_buffer );
SetWindowText( handle_to_display_window, message_bufferw );
}
return 0;
}
注意:当我传入&#34;传入数组&#34;时,我输入它显然为(void **)。
答案 0 :(得分:0)
当数据类型发生变化但算法没有时,是时候考虑使用模板。
template<class Element_Type>
print_array(Element_Type const * p_begin,
Element_Type const * p_end)
{
while (p_begin != p_end)
{
cout << *p_begin;
++p_begin;
}
}
从单维到多维的转换留给了OP和读者。
编辑1:另一种选择
在某些时候,输出功能将需要有关如何打印您提供的信息的信息。
一个选项是您编写自己的printf
函数,该函数具有您发送数据的格式说明符。
另一种选择是将指针传递给打印数据的函数。
基本问题是输出功能需要知道如何打印数据。
对于C ++,我建议在类/结构中覆盖operator<<
。由于类/结构知道数据,因此很容易知道如何打印数据。