#include <stdio.h>

double voltage(double v) {
	return v;
}
double hdot(double h) {
	return h * 2;
}
double ndot(double n) {
	return n * 3;
}

typedef double(*eqpointer)(double);

int main() {
	eqpointer ODE[] = { voltage, hdot, ndot };
	int eq_num = sizeof(ODE)/sizeof(*ODE);
	
	// declared only for this examle
	double result;
	double k1 [eq_num], oneloop[eq_num], midvalues[eq_num];
	// or best malloc(eq_num * sizeof(double));
	
	for (int j = 0; j < eq_num; j++) {
		
		k1[j] = (*ODE[j])((j + 1) * 10);	// random arguments ODE for example only
		oneloop[j] =20 * (*ODE[j])((j + 1));
		midvalues[j] = (k1[j] + oneloop[j]) / 2;  
		result = (*ODE[j])(midvalues[j]);
		
		printf("*** %d) k1[]: %f, oneloop[]: %f, midvalues[]: %f result: %f\n",
			j, k1[j], oneloop[j], midvalues[j], result);
	}
	return 0;
}