double randNormal(double (*fun)(double, double, double), double xmin, double xmax, double sigma, double mju)
{
static double (*Fun)(double, double, double) = NULL, YMin, YMax;
static bool First = true;
if (First)
{
First = false;
srand((unsigned) time(NULL));
}
if (fun != Fun)
{
Fun = fun;
YMin = 0, YMax = Fun(xmin, sigma, mju);
for (int iX = 1; iX < 10000; iX++)
{
double X = xmin + (xmax - xmin) * iX / 10000;
double Y = Fun(X, sigma, …Run Code Online (Sandbox Code Playgroud) 我正在使用R来构建数学模型.我想写一个函数f(a, b, g),它接受3个参数,最后一个是函数.我想知道我可以将函数作为参数传递给另一个函数吗?如果这是可能的,你们能给我一个简单的例子吗?谢谢.
我想传递一个任意函数,它是C中另一个函数的参数.
比如下面的代码(显然不起作用)
#include <stdio.h>
void doit(int (*f)(...), char *fname, ...)
{
va_list argptr;
va_start(argptr, fname);
f(argptr)
va_end(argptr);
}
int func1(char *a, int b)
{
fprintf(stderr, "func1 %s %d\n", a, b);
}
int func2(char *a, int b, int c)
{
fprintf(stderr, "func2 %s %d %d\n", a, b, c);
}
int main(int argc, char **argv)
{
doit(func1, "func1", "blah", 10);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我不确定用什么术语来正确解释这一点,但我已将代码单独放入一个文件中,以了解它是如何工作的,我希望有人可以进一步帮助我!
我理解的主要问题是为什么它void (*exec)(struct test_t*);确实有效?结构成员将自身转换为结构指针?这让我很困惑。
另外,在 switch-case 语句中,我理解在这些行中test.exec = fcn1; test.exec(&test);函数被分配给该结构成员,并且在括号中传递函数参数以便执行该函数。但是这个设置在变量定义中是如何实际发生的呢?
我基本上是分配一个函数作为结构成员吗?如果是,那么在编译结构之前它如何了解自身?这个语法是(*x)(struct y*)用来做什么的?
typedef struct test_t{
int num;
void (*exec)(struct test_t*);
}test_t;
void fcn0(test_t* test);
void fcn1(test_t* test);
void fcn2(test_t* test);
int main(){
while(1){
test_t test = {
.num = 0,
.exec = fcn0
};
printf("Enter a number: ");
scanf("%d", &test.num);
switch (test.num)
{
case 1:
test.exec = fcn1;
test.exec(&test);
break;
case 2:
test.exec = fcn2;
test.exec(&test);
break;
default:
test.exec = fcn0;
test.exec(&test);
break;
} …Run Code Online (Sandbox Code Playgroud) 可能的重复:
你能用 C 编写面向对象的代码吗?
C中的面向对象编程
所以,据我所知,“对象”基本上只是值和方法的包装器。你不能在 C 中使用structs拥有相同的功能吗?Astruct看起来就像一个简单的class,但是,当然,它没有任何方法。在这里,我们触及了我的问题的核心:我根本不明白为什么需要方法。如果我们有一个只接受指向 a 实例的指针的外部函数,岂不是更简单、更节省内存struct?或者甚至让structs 指向这些函数,但这似乎纯粹是美学......
我正在学习C,我来到这个表达式:
void *(*routine)(void *)
Run Code Online (Sandbox Code Playgroud)
我觉得很困惑.也许它是一个指针......指针......指针?
如果我想把这个东西传递给一个函数,我们将如何操纵它?我试图将这个例程构造作为一个参数传递给一个需要void(*)(void)... 的函数但是我真的很遗憾.
我有两个功能,
//virDomain is some struct
int virDomainCreate(virDomain*);
int virDomainDestroy(virDomain*);
Run Code Online (Sandbox Code Playgroud)
如何将这两个函数分配给变量?
我试过了,
int (*func)(virDomain*) = NULL;
func = virDomainCreate(virDomain*); // not working
func = &virDomainDestroy(virDomain*); //not working
Run Code Online (Sandbox Code Playgroud)
感谢你的帮助!若aka
我正处于学习C语言的初始阶段.关于包含void指针的语句,我有一个疑问.
void (*myvar)(const struct foo *);
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我解决上述问题.上面一行的确切含义是什么,以及如何在代码中使用此指针.
我正在查看其他人的代码库,我看到了这个函数原型:
void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr );
Run Code Online (Sandbox Code Playgroud)
它的定义如下:
void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )
{
Radio.Sleep( );
BufferSize = size;
memcpy( Buffer, payload, BufferSize );
RssiValue = rssi;
SnrValue = snr;
State = RX;
}
Run Code Online (Sandbox Code Playgroud)
但是,稍后在超循环中调用它,main如下所示:
RadioEvents.RxDone = OnRxDone;
这究竟是怎么合法的?该函数期待一个字符指针和三个整数,但它没有任何东西,这很好.这里发生了什么?
我有一个不寻常的问题.让我们想象一下我有N个功能:
void function1(){ //some code here }
void function2(){ //some code here }
...
void functionN(){ //some code here }
Run Code Online (Sandbox Code Playgroud)
有没有办法,我可以动态地计算或找出哪个函数,没有IF语句?并根据功能名称的名称,调用它?让我告诉你伪代码,可以更好地描述情况:
for(int I=1;I<=N;I++){
functionI();
}
Run Code Online (Sandbox Code Playgroud)
我的意思是,如果它在某种程度上可以计算(例如在char数组中,但也可以通过任何其他方式)代码,我将在稍后插入和使用.但不是字符串,而是直接像代码.让我演示一下不同的例子:
int num=3;
char functionInString[]="printf(num);
//Some code, that would for example change letters in
functionInString, for example to different fuction
consisting of letters
//And here, do whatever is written in functionToString
Run Code Online (Sandbox Code Playgroud)
对不起,如果我不够清楚.任何人都可以告诉我,如果有可能用C语言,或任何不同的语言,这个概念怎么称呼?