int (*func(int)) (int *,int)

本文通过一个具体的C语言程序示例介绍了如何使用函数指针实现动态选择运算操作。程序定义了两个基本运算函数asgn和mul,并通过函数指针func来动态选择调用这两个函数之一。该示例展示了如何利用函数指针来增强代码的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.iteye.com/problems/24480



#include <stdio.h>  
  
#define NULL 0  
#define ASGN 1  
#define MUL  2  
  
int asgn(int* a, int b) {  
    return *a = b;  
}  
  
int mul(int* a, int b) {  
    return *a * b;  
}  
  
int (*func(int op))(int*, int) {  
    switch (op) {  
    case ASGN:  
        return &asgn;  
    case MUL:  
        return &mul;  
    }  
    return NULL;  
}  
  
int main() {  
    int i = 0xFEED, j = 0xBEEF;  
    printf("%x\n", func(ASGN)(&i, j)); // beef  
    printf("%x\n", func(MUL)(&i, j));  // 8e67a321  
    printf("%x, %x\n", i, j);          // beef, beef  
    return 0;  
}  




<think>我们正在讨论C语言中的函数指针声明。用户的问题是:int (*func)(int) 在C语言中的含义是什么? 根据引用[1]和引用[2]的内容,我们可以这样解释: 首先,引用[1]中提到了一个函数声明:int *func(int a, int b) 这是一个返回int指针的函数。而用户的问题是关于函数指针的。 函数指针是指向函数的指针变量。声明一个函数指针需要指定该指针所指向的函数的返回类型和参数类型。 具体到 int (*func)(int): - 最外层的 int 表示函数的返回类型是整型。 - (*func) 表示 func 是一个指针(注意括号改变了优先级,否则会变成返回指针的函数)。 - (int) 表示这个函数接受一个整型参数。 因此,int (*func)(int) 定义了一个函数指针变量 func,它可以指向一个具有以下特征的函数: 返回类型为 int,并且接受一个 int 类型的参数。 对比引用[1]中的例子:int *func(int) 是一个函数声明,它返回int指针,接受一个int参数。而 int (*func)(int) 则是一个函数指针变量。 引用[2]中提到了函数指针的typedef用法,例如: typedef void (*voidFnVoid_t)(void); 这里定义了一个函数指针类型 voidFnVoid_t,它可以指向一个返回void且没有参数的函数。 所以,用户询问的 int (*func)(int) 就是声明了一个函数指针变量func,它可以指向返回int且有一个int参数的函数。 示例: int foo(int n) { return n*2; } int main() { int (*func_ptr)(int) = foo; // func_ptr指向函数foo int result = func_ptr(5); // 调用函数,result为10 } 注意:函数指针的调用有两种方式: func_ptr(5)(*func_ptr)(5) 都是合法的。 因此,总结: int (*func)(int) 是一个函数指针变量,它指向一个返回int并接受一个int参数的函数。 接下来,我们可以生成相关问题。</think>在 C 语言中,`int (*func)(int)` 是一个**函数指针声明**,其含义如下: ### 🔍 含义解析 1. **`func` 是一个指针** `(*func)` 表示 `func` 是一个指针变量(`*` 是指针符号)。 2. **指向函数的指针** 该指针指向一个**函数**(而非普通数据),因为声明中直接包含参数列表 `(int)`。 3. **函数的签名** - **返回值类型**:`int`(函数返回整型) - **参数类型**:`(int)`(函数接受一个整型参数) 4. **完整解读** `int (*func)(int)` 声明了一个名为 `func` 的指针,该指针指向一个**返回 `int` 类型且接受一个 `int` 类型参数**的函数[^1]。 --- ### ⚖️ 与普通函数声明的区别 - **`int *func(int)`** 这是一个普通函数声明: - `func` 是函数名 - 返回类型是 `int*`(整型指针) - 接受一个 `int` 参数 ```c int *func(int a) { int *p = &a; return p; // 返回整型指针 } ``` - **`int (*func)(int)`** 这是一个函数指针变量: ```c int square(int x) { return x * x; } // 实际函数 int main() { int (*func)(int); // 声明函数指针 func = square; // 指向 square 函数 printf("%d", func(5)); // 输出 25(通过指针调用函数) } ``` --- ### 💡 核心要点 1. **语法关键** 括号 `(*func)` 是区分函数指针和返回指针的函数的关键: - `int (*f)(int)` → **函数指针** - `int *f(int)` → **返回指针的函数** 2. **典型用途** - 回调函数(如 `qsort` 的排序逻辑) - 动态绑定不同功能的函数 - 函数指针数组(实现状态机/命令模式) ```c // 函数指针数组示例 int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } int main() { int (*ops[2])(int, int) = {add, sub}; // 函数指针数组 printf("%d", ops[0](2, 3)); // 输出 5 (add) } ``` 3. **typedef 简化**(引用[2]) 可通过 `typedef` 定义函数指针类型: ```c typedef int (*MathFunc)(int); // 定义函数指针类型 MathFunc func = square; // 声明变量 ``` --- ### 🚫 常见错误 ```c int (*func)(int) = square; // ✅ 正确:函数指针赋值 int *func(int) = square; // ❌ 错误:函数名不能直接赋值 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值