- [перефразировано] как отправить данные обратно в вызывающую функцию?
В основном у вас есть две опции
создать объект для хранения данные в вызывающей функции, передают указатель и заставляют вызываемую функцию использовать
int main(void) {
int src1[10][10] = {0};
int src2[10][10] = {0};
fx(src1, src2);
}
или использовать malloc()
(и друзей) в вызываемой функции, а затем возвращать это вызывающей стороне, которая будет отвечать за free
ресурсы.
typedef int m2[10][10];
int main(void) {
int src[10][10] = {0};
m2 *dst = fx(src);
// use dst
free(dst);
}
m2 *fx(int m[10][10]) {
m2 *x = malloc(10 * 10 * sizeof (int));
// work with m to change x values
return x;
}
Третий вариант, на который следует обратить внимание (без примера кода), заключается в использовании глобальных переменных.
как передать 5 или 6 переменных между функциями?
По сути, просто укажите их в коде вызова, например
printf("%s bought %d %s for %.2f\n", name, quantity, "apples", quantity * price);
Или, если переменные связаны, вы можете попробовать сгруппировать их в struct
и передать указатель
struct GroupData {
char name[100];
int quantity;
char item[100];
double price;
};
struct GroupData x = {"John", 42, "apple", 0.31};
workwithdata(&x); // can also pass a copy of the struct
// workwithcopy(x);
когда использовать функцию void или int?
использовать void
, когда нет необходимости использовать значение из функции
void beep(void); // sounds the bell
use int
когда вы хотите использовать значение из функции
int currenttemp(void); // returns the temperature