相关疑难解决方法(0)

如何解除引用函数指针?

为什么以及如何解除引用函数指针只是"什么都不做"?

这就是我所说的:

#include<stdio.h>

void hello() { printf("hello"); }

int main(void) { 
    (*****hello)(); 
}
Run Code Online (Sandbox Code Playgroud)

来自这里的评论:

函数指针解除引用就好了,但生成的函数指示符会立即转换回函数指针


这里的答案:

解除引用(以你认为的方式)函数的指针意味着:访问CODE内存,因为它将是一个DATA内存.

不应该以这种方式取消引用函数指针.相反,它被称为.

我会使用"dereference"这个名字与"call"并排使用.没关系.

无论如何:C的设计方式是函数名称标识符和变量保持函数的指针都是相同的:地址到CODE内存.它允许通过在标识符或变量上使用call()语法来跳转到该内存.


如何准确地不提领一个函数指针的工作?

c c++ pointers function-pointers

66
推荐指数
2
解决办法
3万
查看次数

存储函数指针的正确语法

令人惊讶的是,无论在函数名之前使用什么符号,以下代码在 gcc 和 clang 中都能很好地编译:*&或者什么都不用。标准是否允许其中任何一个?存储函数指针的首选方法是什么?

#include <stdio.h>

typedef int foo(int a);

template <typename X>
int g(int y) {
    return y * sizeof(X);
}

int main() {

    foo* xxx;

    // 1. what is correct according to standard?
    // 2. why they all work?
    xxx = *g<float>;
    xxx = &g<float>;
    xxx = g<float>;

    printf("ok %d\n", xxx(5));
}
Run Code Online (Sandbox Code Playgroud)

c++ function-pointers implicit-conversion

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

void(int)&void(*)(int)之间的区别

我知道void (*)(int)是函数指针但是是什么void(int)

它用于std::function模板.

说我有一个功能void fun(int){}:decltype(&fun)给予void(*)(int)decltype(fun)给予void(int)

c++

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

C++中void(*)()和void(&)()之间的区别

在此示例代码中,func1void (*)(int, double)funky的类型void(&)(int, double).

#include <iostream>

using namespace std;

void someFunc(int i, double j) {
    cout << i << ":" << j << endl;
} 

int main(int argc, char *argv[]) {

    auto func1 = someFunc; 
    auto& func2 = someFunc;

    cout << typeid(func1).name() << endl;
    cout << typeid(func2).name() << endl;

    func1(10, 20.0);
    func2(10, 30.0);
}
Run Code Online (Sandbox Code Playgroud)

输出显示了差异:

PFvidE
FvidE
10:20
10:30
Run Code Online (Sandbox Code Playgroud)

实际上,这两种类型有什么区别?

c++ pointers

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

使用C ++ 11 is_same检查函数签名?

//test.cpp
#include <type_traits>

double* func() {}

static_assert(std::is_same<double*(*)(), decltype(func)>::value, "");

int main() {}
Run Code Online (Sandbox Code Playgroud)

编译命令:

g++ -std=c++11 -c test.cpp
Run Code Online (Sandbox Code Playgroud)

输出:

test4.cpp:6:1: error: static assertion failed:
static_assert(std::is_same<double*(*)(), decltype(func)>::value, "");
^
Run Code Online (Sandbox Code Playgroud)

上面的代码有什么问题?我该如何解决?

c++ signature type-traits c++11

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