返回介绍

1.2 函数指针

发布于 2024-10-12 21:58:08 字数 948 浏览 0 评论 0 收藏 0

函数类型由参数列表和返回值共同组成。注意区别函数类型和函数指针类型。

函数名默认为函数指针。

typedef void (func_t)();        // 函数类型
typedef void (*func_ptr_t)();   // 函数指针类型

int main (void) 
{
    void a () { puts("a"); }

    func_t *f = a;             // 定义函数指针变量(type *)。
    func_ptr_t fp = a;         // 直接用指针类型。

    f();
    fp();

    return 0;
}

也可以直接以原型方式定义函数指针变量。

int main (void) 
{
    void a() { puts("a"); }

    void (*f)() = a;
    f();

    return 0;
}
int main (void) 
{
    void *p = NULL;
    void (*add)(int, int) = (void(*)(int, int))p;  // 类型转换。

    printf("%p\n", add);
    
    return 0;
}

不能用函数类型创建对象,不能作为函数返回值,可改用指针。

func_t f = NULL;
^~~~~~ error: function 'f' is initialized like a variable
func_t test()
       ^~~~ error: 'test' declared as function returning a function
{
func_ptr_t test ()
{
    void a () { puts("a"); }
    return a;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文