在c中反转数组

我检查了一些在C中反转数组的video,因此我知道我的逻辑是正确的。 这是我的代码:

#include  void reverse( int arr[], unsigned int len ) { int i=0; int n=len; int j=len-1; int temp; while (i<n) { temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; i++; j--; } } void reverse( int arr[], unsigned int len ); int main( void ) { int a[] = {11, 19, 13}; unsigned int len = 3; reverse( a, len ); int k=0; for( k=0; k<len; k++ ) { printf( "%d ", a[k] ); } printf( "\n" ); return 0; } 

它输出相同的数组。 我找不到问题所在。 我应该为reversefunction返回一些东西吗?

你正在反转arrays两次; 这就是你拥有原始arrays的原因。

怎么样? 举一个10元素数组的例子。 作为您的第一步,您将交换第0和第9个元素。 作为你的最后一步,你将交换第9和第0个元素。 净结果:没有变化。

你不想让i跑到n 。 你想把i运行到j ,这样你就不会交换元素(即将条件改为while (i < j) { ... }

你正在颠倒你的arrays两次,所以一旦你颠倒了它,你再扭转它,使它变成与原始相同。

停止反转不要运行循环直到n ,而是运行直到j

除此之外,为了良好的编程习惯,尽量避免手动参数。例如。 你的代码中使用了len,i,j,n在你身边。

  #include  void reverse( int arr[],int i,int j ); void reverse( int arr[], int i,int j ) { int temp; while (i