LINUX.ORG.RU

[массив функции] [указатели] подскажите

 


0

2

У меня есть 4 функции:

double f1( double sh, int temp);

double f2( double sh,int temp);

double f3( double sh,int temp);

double f4( double sh,int temp);

я обозвал массив:

double (*u[4])(double,int)={f1,f2,f3,f4};

как теперь вызвать функцию f1 с помощью индекса 1?

делаю так - не получается:

sh,temp - глобальные переменные
for (int i=0; i<n; i++)
	{
		temp=i;
                          s1+=(*u[4])(sh,temp)[1];
		//s1+=(*u)(sh,temp);  -  так компилируется, но не собирается.
             }

если честно - не особо понимаю double (*u[4])(double,int)={f1,f2,f3,f4}; просто, поэтому и туплю((



Последнее исправление: mrXorg (всего исправлений: 1)
#include <stdio.h>

double f1(double sh, int temp)
{
  return 1;
}

double f2(double sh, int temp)
{
  return 2;
}

double f3(double sh, int temp)
{
  return 3;
}

double f4(double sh, int temp)
{
  return 4;
}

int main(void)
{
  int i;
  double (*u[4])(double, int) = { f1, f2, f3, f4 };
  for(i = 0; i < 4; ++i){
    printf("%f\n", u[i](0.0, 0));
  }
  return 0;
}

УМВР.

encyrtid ★★★★★
()

double *u - указатель на double;
double (*u)() - указатель на функцию, возвращающую double и не принимающую параметров;
double* (*u)() - то же самое, только возвращает указатель на double;
double (*u[4])() - массив указателей на функцию возвращающую double и не принимающую параметров
; Для вызова функции по указателю нужно просто передать параметры указателю без разыменования:

#include <stdio.h>

double function(int x)
{
  return 0.5 + x;
}

int main(void)
{
  double(*func)(int) = &function;
  printf("%f\n", func(1.0));
  return 0;
}

encyrtid ★★★★★
()

если честно - не особо понимаю double (*u[4])(double,int)={f1,f2,f3,f4}; просто, поэтому и туплю((

cdecl, теперь и онлайн

arturpub ★★
()
Ответ на: комментарий от encyrtid

encyrtid, еще раз спасибо)

arturpub, вам тоже спасибо)

mrXorg
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.