Тип возвращаемого значения функции неправильный.
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];
}
}
Как вы можете видеть, внутри функции используются только его номинал ameters.
Кстати, рекурсивная функция может выглядеть следующим образом. :)
#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