Для начинающих это объявление функции некорректно, поскольку для параметров нет спецификаторов типов.
void update(w,x,y,z){
w = z+2;
x = x+1;
y = y+2;
z = w+1;
}
Если вы хотите обновить передаваемые объектам функции, они должны передаваться по ссылке через указатели.
Функция может выглядеть следующим образом:
void update( unsigned int *w, unsigned int *x, unsigned int *y,unsigned int *z )
{
*w = *z+2;
*x = *x+1;
*y = *y+2;
*z = *w+1;
}
/ Метод обновления может иметь любой тип /
Функция можетне объявляется, как, например,
void update( void *w, void *x, void *y, void *z );
, потому что внутри функции вам нужно знать фактические типы аргументов.
Вы можете определить функцию следующим образом
void update( void *w, void *x, void *y, void *z, void sum( void *item, void *value ) );
То есть с одним дополнительным параметром, который имеет тип функции.Соответствующая функция, используемая в качестве аргумента, может привести указатель к требуемому типу и выполнить сложение.
Также эти вызовы printf
являются неправильными
printf("%lu\t %lu\t %lu\t %lu\n",a[0],a[1],a[2],a[3]);
printf("%lu\t %lu\t %lu\t %lu\n",a[0],a[1],a[2],a[3]);
, потому что используется неправильное преобразованиеспецификаторы формата для объектов типа unsigned int.Используйте %u
вместо %lu
.
Обратите внимание на то, что функции pass
и update
должны быть объявлены перед их вызовами, например, перед функцией main
.