为什么这个反向功能不能正常工作?

时间:2015-03-03 14:15:35

标签: c function reverse

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数组。我错过了什么或?感谢您的帮助:))

1 个答案:

答案 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;
    }     
}