1. c语言 函数指针
加个注释吧:
/*
函数x
参数1:类型int未标注形参
参数2:类型void(*)(int)形参y
返回值:类型void(*)(int)
*/
void(*x(int,void(*y)(int)))(int);
其中 “void(*)(int)" 代表接收一个int参数返回类型为void的函数指针类型,比如:
voidfoo(inti)
{
printf("%d",i);
}
所以你可以这样调用它:
...
void(*pf)(int);
inti=0;
pf=x(i,&foo);
...
2. C语言函数指针调用
void point(char *p){ p+=3; } //加上void比较好
char b[4]={'a','b','c','d'}, *p=b; //写在同一行,p是char*的
point(p);// 这里传递的是指针,在函数里面改指针是“临时变量”,不是局部变量
//临时对象不会被记录,如果改p指向的内存就可以被记录。
printf("%c\n", *p); // 输出结果为a,因为p是扔指向b[]其实位置
答案为a
3. C语言,函数指针
不能. *f(int no)返回的是一个指针,void (指针)();是指针函数,而非函数指针。
函数指针示例:
int(*f)(intx);/*声明一个函数指针*/
f=func;/*将func函数的首地址赋给指针f*/
intm=f(10);/*调用方法与调用本身没区别*/
LRESULT(*f)();//这个是申明函数指针
f=MyProc;//记住不要括号
LRSULTx=f();//就这样调用
4. C语言指针函数
char *match (char*s,char ch1,char ch2)
函数各部分的含义:
第一个char,一般是代表函数的返回值是一个字符。但是它后面有一个*,应该把char和*连起来看,就是char*了。
那么,第一个就是char*,代表函数的返回值是一个字符指针(地址)。
match是函数的名字。
括号内是函数的参数,多个参数用逗号分隔。本例共有3个参数:char*s,char ch1,char ch2,第一个是s,类型为char*型(字符指针型),后两个ch1、ch2都是char型(字符型)。
到这儿,你就知道去掉*match前的*为什么就不对了。
另外,括号里参数类型(如包含指针)跟函数返回值的类型无关。函数名前加不加*只与函数返回值的类型有关。
5. c语言函数指针
#include "stdio.h"
int max(int x,int y)
{
return x>y?x:y;
}
void main()
{
int a=1,b=2;
int (*fun)(int,int);
fun = max;
// 下边两行结果一样
printf("call max=%d\n", fun(a,b)); // 调用max()
printf("call max=%d\n", (*fun)(a,b)); // 调用max()
// 下边四行结果一样
printf("max address:%p\n", max); // 函数地址
printf("max address:%p\n", &max); // 函数地址
printf("max address:%p\n", fun); // 函数指针
printf("max address:%p\n", *fun); // 函数指针
}
6. C语言中的函数指针
函数指针是定义一个指向函数的指针,形式为:void (*p)(void);
一般用法:
int fun1(int x);
int fun2(int x);
char fun3(int x);
int fun4(char x);
int main(void)
{
int (*p)(int x);
p=fun1; //指向fun1
p(2) //这时等价于fun1(2)
p=fun2; //也可以指向fun2
。
。
但是注意了,p=fun3;和p=fun4都是错误的,参数类型跟返回类型必须一样。
至于指针函数,就是返回一个指针的函数。
基本形式:int *fun(void);
一般用法:
int *fun(void);
int main(void)
{
int *p=NULL; //声明一个整型指针变量
p=fun(); //接收fun()的返回值
。
。
7. C语言函数指针
scanf("%d\n",&m);
改为:
scanf("%d",&m);即可。
scanf()函数是以回车或者空格或者tab键作为输入结束,所以输入格式中千万不要加\n,否则程序一直会处在等待输入结束状态,输入再多的回车键都会被看成输入数值后的一个输入(即("%d\n"中的\n)而不是被看成输入结束,也就是说输入永远没有结束,程序永远不会继续下去。
8. C语言中关于指向函数指针的问题
他视频上没带参数是因为他那个是无参函数吧。
声明函数指针的时候,你要把参数类型写清楚,因为C要进行语法检查的,参数类型或个数不同,编译器认为是2个不同的函数指针类型,报错就是类型不匹配。