相关疑难解决方法(0)

了解以下C++函数定义

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)

c++

2
推荐指数
1
解决办法
132
查看次数

R语言,我们可以传递函数作为参数

我正在使用R来构建数学模型.我想写一个函数f(a, b, g),它接受3个参数,最后一个是函数.我想知道我可以将函数作为参数传递给另一个函数吗?如果这是可能的,你们能给我一个简单的例子吗?谢谢.

r higher-order-functions

2
推荐指数
1
解决办法
1317
查看次数

如何将函数和变量参数列表传递给C中的另一个函数?

我想传递一个任意函数,它是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)

c syntax pointers function

2
推荐指数
1
解决办法
287
查看次数

为什么将结构成员转换为其结构指针类型有效?

我不确定用什么术语来正确解释这一点,但我已将代码单独放入一个文件中,以了解它是如何工作的,我希望有人可以进一步帮助我!

我理解的主要问题是为什么它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 struct pointers function

2
推荐指数
2
解决办法
86
查看次数

C 怎么不是面向对象的?

可能的重复:
你能用 C 编写面向对象的代码吗?
C中的面向对象编程

所以,据我所知,“对象”基本上只是值和方法的包装器。你不能在 C 中使用structs拥有相同的功能吗?Astruct看起来就像一个简单的class,但是,当然,它没有任何方法。在这里,我们触及了我的问题的核心:我根本不明白为什么需要方法。如果我们有一个只接受指向 a 实例的指针的外部函数,岂不是更简单、更节省内存struct?或者甚至让structs 指向这些函数,但这似乎纯粹是美学......

c architecture oop struct class

1
推荐指数
1
解决办法
2986
查看次数

void*(*例程)(void*)在C中的含义是什么?

我正在学习C,我来到这个表达式:

void *(*routine)(void *)
Run Code Online (Sandbox Code Playgroud)

我觉得很困惑.也许它是一个指针......指针......指针?

如果我想把这个东西传递给一个函数,我们将如何操纵它?我试图将这个例程构造作为一个参数传递给一个需要void(*)(void)... 的函数但是我真的很遗憾.

c syntax pointers function-pointers argument-passing

1
推荐指数
2
解决办法
4572
查看次数

c将函数指针分配给变量

我有两个功能,

//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 pointers function-pointers function

1
推荐指数
1
解决办法
5183
查看次数

Void指向结构的指针

我正处于学习C语言的初始阶段.关于包含void指针的语句,我有一个疑问.

void (*myvar)(const struct foo *);
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决上述问题.上面一行的确切含义是什么,以及如何在代码中使用此指针.

c struct pointers function-pointers

1
推荐指数
1
解决办法
106
查看次数

如何将这个结构元素评估为没有parantheses的函数?

我正在查看其他人的代码库,我看到了这个函数原型:

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;

这究竟是怎么合法的?该函数期待一个字符指针和三个整数,但它没有任何东西,这很好.这里发生了什么?

c function

1
推荐指数
1
解决办法
68
查看次数

计算在C中使用哪个函数(或代码类型)

我有一个不寻常的问题.让我们想象一下我有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语言,或任何不同的语言,这个概念怎么称呼?

c artificial-intelligence function dynamic

1
推荐指数
1
解决办法
85
查看次数