Первый параметр функции имеет тип int *
void plusMinus(int*change, int num, int funcTo){
, но вы передаете аргумент типа int **
int* pointer;
plusMinus(&pointer, 250, 5);
Кроме того, указатель pointer
равен неинициализирован и имеет неопределенное значение. В результате программа имеет неопределенное поведение.
В этом вызове printf
printf("%d\n", &pointer[x]);
спецификатор преобразования %d
ожидает объект типа int
во время передачи объект типа int *
.
Вот ваша обновленная программа
#include <stdio.h>
void plusMinus( int *a, int num, int funcTo )
{
int range = 2 * funcTo + 1;
int start = num - funcTo;
for ( int i = 0; i <range; i++ )
{
a[i] = start + i;
}
}
int main(void)
{
int funcTo = 5;
int a[2 * funcTo + 1];
plusMinus( a, 250, funcTo );
for ( int i = 0; i < 2 * funcTo + 1; i++ )
{
printf( "%d ", a[i] );
}
putchar( '\n' );
return 0;
}
Его вывод
245 246 247 248 249 250 251 252 253 254 255
Более интересно написать функцию как рекурсивная функция.
Вот и вы.
#include <stdio.h>
void plusMinus( int *a, int num, int funcTo )
{
a[0] = num - funcTo;
if ( funcTo )
{
plusMinus( a + 1, num, funcTo - 1 );
a[2 * funcTo] = num + funcTo;
}
}
int main(void)
{
int funcTo = 5;
int a[2 * funcTo + 1];
plusMinus( a, 250, funcTo );
for ( int i = 0; i < 2 * funcTo + 1; i++ )
{
printf( "%d ", a[i] );
}
putchar( '\n' );
return 0;
}
Вывод программы такой же, как показано выше.
245 246 247 248 249 250 251 252 253 254 255