函数的返回类型不正确。
int koko(int *array,int *array2,int c,int d)
{
for(c=6;c>-1;c--,d++)
{
array2[d]=array[c];
}
return array2;
}
返回的表达式具有类型int *
,而返回类型是int
。
而这个电话
c=koko(niz,niz2,a,b);
没有意义,因为变量a
和b
未初始化。
还有这个函数的单次调用printf
printf("%d", c);
与输出整个结果数组没有任何共同之处。
看来您需要的是以下内容。
#include <stdio.h>
#include <stdlib.h>
int * reverse( const int *a, size_t n )
{
int *result = malloc( n * sizeof( int ) );
if ( result != NULL )
{
for ( size_t i = 0; i < n; i++ )
{
result[i] = a[n - i - 1];
}
}
return result;
}
int main(void)
{
int a[] = { 2, 4, 5, 7, 4, 8, 3 };
const size_t N = sizeof( a ) / sizeof( *a );
int *b = reverse( a, N );
if ( b != NULL )
{
for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", b[i] );
}
putchar( '\n' );
}
free( b );
return 0;
}
程序输出为
3 8 4 7 5 4 2
如果您想以相反的顺序将一个数组复制到另一个已经存在的数组中,那么相应的函数可以如下面的演示程序所示。
#include <stdio.h>
void reverse_copy( const int *a, size_t n, int *b )
{
const int *p = a + n;
while ( p-- != a )
{
*b++ = *p;
}
}
int main(void)
{
enum { N = 7 };
int a[N] = { 2, 4, 5, 7, 4, 8, 3 };
int b[N];
reverse_copy( a, N, b );
for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", b[i] );
}
putchar( '\n' );
return 0;
}
程序输出将与上图相同。
3 8 4 7 5 4 2
在函数中不引入任何额外的变量(实际上是多余的),它可以这样定义
void reverse_copy( const int *a, size_t n, int *b )
{
while ( n-- )
{
*b++ = a[n];
}
}
正如您在函数内部看到的那样,仅使用了它的参数。
顺便说一句,递归函数可以如下所示。:)
#include <stdio.h>
void reverse_copy( const int *a, size_t n, int *b )
{
if ( n )
{
*b = a[n-1];
reverse_copy( a, n - 1, b + 1 );
}
}
int main(void)
{
enum { N = 7 };
int a[N] = { 2, 4, 5, 7, 4, 8, 3 };
int b[N];
reverse_copy( a, N, b );
for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", b[i] );
}
putchar( '\n' );
return 0;
}
它的输出再次是
3 8 4 7 5 4 2