相关疑难解决方法(0)

在不使用单独的typedef的情况下声明函数指针数组的语法是什么?

可以像这样创建函数指针数组:

typedef void(*FunctionPointer)();
FunctionPointer functionPointers[] = {/* Stuff here */};
Run Code Online (Sandbox Code Playgroud)

在不使用typedef?的情况下创建函数指针数组的语法是什么?

c++ arrays syntax typedef function-pointers

44
推荐指数
3
解决办法
4万
查看次数

30
推荐指数
6
解决办法
2610
查看次数

功能指针与函数调用有什么区别?

你好朋友,
我怎样才能使用函数指针数组?
如果我们将看到上面的链接,它会告诉我们函数指针是如何工作的.
现在的问题是我为什么要选择函数指针?
为什么我不能直接使用函数调用?
我会用函数指针获得什么好处?
例如

enum{a, b, c};
void A();
void B();
void C();
void (*fun[3])() = {A, B, C};

Now when I need to call a function I am doing like,
fun[a](); // This calls function A
// And so on...
Run Code Online (Sandbox Code Playgroud)

同样可以在函数调用中完成

就像我需要直接调用函数A,B或C.我可以这样

A();
B();
or 
C();
Run Code Online (Sandbox Code Playgroud)

那为什么function pointer呢?

c function-pointers function

8
推荐指数
4
解决办法
1万
查看次数

void函数指针的二维数组c++

我正在尝试在 2 个计算机“玩家”之间构建一个高效的石头剪刀布模拟器。我在这里看到的一个建议是使用矩阵来存储可能的结果。我真的很喜欢这个想法,因为这意味着我不必有 9 个不同的 if() 语句来说明所有可能的值。每当比赛结束时,我都有函数来迭代每个玩家的获胜、失败和平局的数量。因此,我认为如果我可以构建一个函数指针的二维数组,那么 [0][0] 表示双方都抛出“Rock”并导致 Draw,抛出函数 addDraw( ) 每个玩家。我找到了一个在这里工作的一维函数指针数组的例子。

当我尝试编译时,我的代码抛出了几个错误。让我知道是否需要其他任何东西。

调用结果的函数:

void Player::result(vector<Player*> &vals, int x, int y)
{
    Player *p1 = vals[0];
    Player *p2 = vals[1];

    void(*results1[3][3]) =
    {
        { p1->addDraws, p1->addWins, p1->addLosses },
        { p1->addLosses, p1->addDraws, p1->addWins },
        { p1->addWins, p1->addLosses, p1->addDraws }
    };
}
Run Code Online (Sandbox Code Playgroud)

添加赢、输和平局的函数:

void Player::addWins()
{
    wins++;
}

void Player::addLosses()
{
    losses++;
}

void Player::addDraws()
{
    draws++;
}
Run Code Online (Sandbox Code Playgroud)

所有函数都在 Player.h 中初始化并在 Player.cpp 中声明(我认为这是正确的术语)。我收到的最常见的错误是“错误 C2440:‘初始化’:无法从‘void (__thiscall Player::*)(void)’转换为‘void *’

c++ arrays pointers

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

数组作为带参数的函数?

我正在尝试学习c,所以我尝试阅读一些源代码.
但我不知道这可能意味着什么:

static const char*(*const functab[])(void)={
        ram,date
};
Run Code Online (Sandbox Code Playgroud)

第一部分,static const char*很好,因为它似乎是一个函数(有一个类型的参数void),static应该意味着它只在这个文件中可见,并且const char*应该意味着值不能改变,但地址可以改变.
但在这种情况下,在函数名后面的最后一部分之后没有意义,就像它的情况一样

static const char * date(void);
static const char * ram(void);
Run Code Online (Sandbox Code Playgroud)

而不是函数名称(*const functab[]),一个名为functab的const数组包含地址?
这是包含函数ram和date的某种包装函数吗?一些声明数组的替代方法?

c arrays pointers const function-pointers

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

什么是调度表?我怎样才能用C实现它?

首先我要说的是我知道函数指针是如何工作的。如果您想更详细地解释它们,请继续,但是我问您的是如何使用 C 在调度表中实现它们。

我已经搜索过调度表是什么,但除了对它如何工作的模糊理解之外,我并没有真正理解任何东西。

请分享它的实际用途以及我如何用 C 创建我自己的调度表。非常感谢帮助。

c pointers function-pointers dispatch-table

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

如何在没有解除引用的情况下调用指向函数的指针?

我在C++程序中有一个奇怪的typedef语句,由Py ++生成.

double radius(int);  // function to be wrapped
typedef double (*radius_function_type)(int);    
bp::def("radius", radius_function_type(&radius));   // bp::def is a function for wrapping
Run Code Online (Sandbox Code Playgroud)

到目前为止我想到的是上面的typedef statemnt不是那种类型,我们大多数人都熟悉,

typedef complex_type simple_alias;
Run Code Online (Sandbox Code Playgroud)

相反,它是一种声明指向函数的指针的方法,该函数将int作为参数并返回double(与原型相同).所以现在我的问题是,如何使用函数的地址作为参数来调用指向函数的指针(没有解除引用)?这也与原型不符.有人请解释一下!

c++ typedef function-pointers

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

什么是这段代码的含义?

在头文件中,定义由.给出

static void (*foo[CONST]) (void);
Run Code Online (Sandbox Code Playgroud)

它的含义是什么?

c

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

这两种形式的指针参数语法真的相同吗?

我知道在 C 中,当涉及到指针参数时,我们有两种不同类型的语法。我只是想知道它们是否真的一样。考虑这个小程序,其中我有两个函数 fx1 和 fx2,它们采用具有不同 sintax 的指针参数:

void fx1( int* p ){

    *p = 10;

}

void fx2( int p[] ){

    *p = 10;

}

int main(){

    int a = 20;
    
    fx1(&a);
    fx2(&a);

Run Code Online (Sandbox Code Playgroud)

c arrays pointers

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

这个声明"浮动(*x [20])(*int a)"是什么意思?

我发现了这个奇怪的变量声明

float (*x[20])(*int a); 
Run Code Online (Sandbox Code Playgroud)

它可能意味着什么?
它的目的是什么?

c

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

功能在另一个功能

如果我们有两个函数,例如A和B.我们在函数A中调用函数B.是否有必要在定义函数A之前定义函数B.

c++ function-pointers

-3
推荐指数
1
解决办法
90
查看次数