C Как получить результат из функции и вывести в консоль
К примеру у меня есть подобная функция:
double* func(double** a, double* y, int n){
double* res = new double[n];
...
return res;
}
И её результат в main'е я могу получить следующим образом
double* res = new double[n];
res = func(a, y, n);
printf("Result:\n");
for (int i = 0; i < n; i++) {
printf("x[ %d ]= %lf\n", i, res[i]);
}
Но , к примеру, внутри функции я еще считаю кол-во итераций. Каким образом я могу их "извлечь" из неё, чтобы вывести результат в консоль?
Ответы (1 шт):
При
double* res = new double[n];
res = func(a, y, n);
вы получаете не только значение, но и утечку памяти... И потом, это никак не С! А в С++ есть и другие варианты, которых нет в С — например, передача аргумента по ссылке. С каким всё же языком вы работаете?
Договоримся сразу — возврат через глобальную переменную мы не рассматриваем.
Тогда вот вариант С с передачей указателя на переменную для хранения числа итераций.
double * func(double** a, double* y, int n, int * iter)
{
double* res = new double[n];
// ...
if (iter) *iter = 125; // :)
return res;
}
int main()
{
...
int it;
res = func(a,y,n,&it);
printf("Iterations - %d\n",it);
}
Если у вас С++ — то же самое можно сделать, передавая по ссылке:
double * func(double** a, double* y, int n, int& iter)
{
double* res = new double[n];
// ...
iter = 125; // :)
return res;
}
int main()
{
...
int it;
res = func(a,y,n,it);
printf("Iterations - %d\n",it);
}
Можно также вернуть структуру из пары значений. Например,
typedef struct ret_
{
double * d;
int iter;
} ret;
ret func(double** a, double* y, int n)
{
double* res = 0;
// ...
ret R;
R.d = res;
R.iter = 125;
return R;
}