gpt4 book ai didi

c - 为什么这个反向函数不能正常工作?

转载 作者:行者123 更新时间:2023-11-30 15:23:20 25 4
gpt4 key购买 nike

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

最佳答案

我认为你的函数声明(和定义)没有任何意义。

我会按以下方式编写函数

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

关于c - 为什么这个反向函数不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28834016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com