首页 > 解决方案 > void f() 和 void(*f)() 有什么区别?在处理函数指针时,所有可能的语法是什么?

问题描述

void F(void f(), void(*v)())
{

}

据我了解,这两个参数具有相同的类型,都是指向不带任何内容并返回的函数的指针void。这两种写法是什么?如果它们都是完全相同的东西,那么为什么void f()不受欢迎void(*f)()呢?第一个似乎更容易,因为它看起来像普通函数的编写方式。还有在处理函数指针时可以使用的所有可能的语法是什么?或者在哪里可以找到它们?以下是我能够得到的一些:

#include <iostream>
#include <vector>

void func1()
{
    std::cout << "func1\n";
}

void (*returnFunc1())()
{
    return func1;
}

auto returnFunc1_2() -> void(*)()
{
    return func1;
}

void func2(int x)
{
    std::cout << "func2 " << x << "\n";
}

auto returnFunc2() -> void(*)(int)
{
    return func2;
}

int func3(int, bool)
{
    std::cout << "func3\n";
    return 0;
}

int (*returnFunc3(long long))(int, bool)
{
    return func3;
}

void func4(void f(), void(*v)())
{
    std::cout << "func4\n";
}

void (*returnFunc4())(void(), void(*)())
{
    return func4;
}

int main()
{

    void (*funcPointer)() = func1;
    funcPointer();

    std::vector<void(*)()> v;
    v.push_back(func1);
    v.back()();

    returnFunc2()(123);

    returnFunc3(123)(456, true);

    returnFunc4()(func1, func1);
}

有没有其他可以使用的语法?我只是好奇。

例如, 的含义是int (*(*foo)(void ))[3]什么?如何阅读这样的声明?或者我在哪里可以了解如何阅读这些神秘的陈述?

标签: c++function-pointersfunction-declaration

解决方案


推荐阅读