return_code swap_int_buffer(int* buffer, int size, int index1, int index2) {
if(index1 <0 || index2<0){
return INVALID_ARGUMENT_NEGATIVE;
} else if(index1 > size || index2 >size){
return INVALID_INDEX_OUT_OF_BOUNDS;
}else{
int *bucket;
int i;
int j;
bucket = (int*)malloc(sizeof(int)*size);
for(i = size - 1, j = 0; i>=0; i--, j++){
*(bucket+j) = *(buffer+i);
}
for(i=0; i<size; i++){
*(buffer+i) = *(bucket+i);
}
return SUCCESS;
}
return NOT_IMPLEMENTED;
}
我不明白为什么当我测试这段代码时它无法正常工作,测试由我的大学提供,该函数用于反转int数组。我错过了什么或?感谢您的帮助:))
答案 0 :(得分:1)
我在你的函数声明(和定义)中没有看到任何重要的意义。
我会按照以下方式编写函数
void reverse( int *a, size_t n )
{
for ( size_t i = 0; i < n / 2; i++ )
{
int x = a[i];
a[i] = a[n-i-1];
a[n-i-1] = x;
}
}
如果您有一个名为a
的数组,并希望从索引i1
开始以索引i2
结束,那么您可以按以下方式调用该函数
reverse( a + i1, i2 - i1 + 1 );
这些功能应该尽可能简单。所有参数检查都应该在函数的调用者中完成。如果您愿意,可以使用您显示的签名为函数编写包装器。还要考虑到将索引声明为int而不是size_t是没有意义的。
如果必须按照您所示的方式声明该函数,则可以像这样定义(不测试)
return_code swap_int_buffer( int *buffer, int size, int index1, int index2 )
{
if ( index1 < 0 || index2 < 0 )
{
return INVALID_ARGUMENT_NEGATIVE;
}
else if( index1 >= size || index2 >= size )
{
return INVALID_INDEX_OUT_OF_BOUNDS;
}
else if ( index2 < index1 )
{
return NOT_IMPLEMENTED;
}
else
{
int n = index2 - index1 + 1;
buffer += index1;
for ( index1 = 0; index1 < n / 2; index1++ )
{
int x = buffer[index1];
buffer[index1] = buffer[n-index1-1];
buffer[n-index1-1] = x;
}
return SUCCESS;
}
}