c语言调用函数指针

并不是不规范的问题,你子程序写法只能在子程序中输出正确的数据,而在主函数中无法得到交换过的x和y的值。参考程序运用指针让子程序去读写a和b的值,在子程序执行完成后,a和b的值确实得到了交换。

你的程序中子程序采用的不是指针类型参数,这样子程序无法将交换过后的值传回来。

⑵ c语言指针函数和函数指针有什么不同

如楼上所说 。
指针函数 的本质是 函数 ,只是他的返回值 类型 是指针变量。
比如 int * A(int num); 这就是一个 指针函数。
函数指针 是一个 指针变量 ,只不过 他是 指向函数的 指针变量。
比如 有函数定义 如上 int * A(int num); 再有 int (*pf)(int num);
则是 pf = A;就把 函数A的首地址 赋值给 pf 函数指针了。

⑶ C语言函数指针

C语言函数前面加个指针 表示函数的返回值是指针类型的。实例: #include using namespace std; int* lpfun1(int,int); //声明一个返回指针为int类型的函数 void main() { int *result=lpfun1(10,20); printf("%d\n",*result); delete result;//删除堆中的指针 result=0;//使指针无效 } int* lpfun1(int x,int y) { int *p=new int(0); *p=x+y; return p; }

⑷ c语言中函数指针是什么 有什么用 举个实例

函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。

函数指针有两个用途:调用函数和做函数的参数。


函数指针的声明方法为:

返回值类型 ( *指针变量名) ([形参列表]);

如:

int func(int x); /* 声明一个函数 */

int (*f) (int x); /* 声明一个函数指针 */

f=func; /* 将func函数的首地址赋给指针f */

或者使用下面的方法将函数地址赋给函数指针:

f = &func;

赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。

下面的程序说明了函数指针调用函数的方法:

#include<stdio.h>
intmax(intx,inty){return(x>y?x:y);}
intmain()
{
int(*ptr)(int,int);
inta,b,c;
ptr=max;
scanf("%d%d",&a,&b);
c=(*ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
return0;
}

⑸ c语言的函数指针举个例子

函数指针 就是指向函数的指针

比如

voidpr_int(inta)//函数
{
printf("%d ",a);
}
voidfunc(void(*p)(int),intm)//函数指针做参数
{
p(m);//调用函数指针
}
intmain()
{
func(pr_int,100);
return0;
}

⑹ C语言中函数指针用法

在C语言中,指针被广泛使用,而函数指针是最为高级的用法之一,也是容易疑惑的地方之一。看下面这段代码:#include <stdio.h>void F(int a, int* output)
{
printf("a = %d\n", a);
*output = a + 1;
}typedef void (*FUNC)();int main()
{
FUNC f = F;
int ret = 0;
f(3, &ret);printf("ret = %d\n", ret);
return 0;
}上面看出 FUNC 的类型是与F的类型不匹配的,这样可以通过编译吗?答案是: 可以的。由于在C语言中编译函数的时候,是仅仅将其函数名作为该函数的
唯一标识,为其分配相应地址。所以虽然FUNC 与 F的类型不一致,但是对于编译器看来
都是两个地址,是无所谓的。用上面的特点,可以写出非常通用的函数指针类型,typedef int (*FUNC)(); 这里之所有要有返回值,是用来标识该函数是否执行成功的错误代码标志。 随说做了有一段时间的C了,但尽然没有搞明白函数指针的用法,见到了也没有好好研究,今天终于有时间了,在网上搜了一下,终于弄懂了.原来就是定义了一个指针变量,只不过形式有点怪罢了.其实还是当成指针用就行了!一般有两种用法:1定义函数指针int (*functionPoint)(int, int)----这只是定义了一个指向函数的指针int a(int a,int b)----------------这是与之相符的函数原型void main()-----------------------使用{ functionPoint = a;------------先赋值 functionPoint(1,2);----------调用
}2用typedef定义使用typedef int (*functionPoint)(int,int);----------定义了一种类型名为functionPoint的指针int a(int a, int b)-----------------------------函数原型void main(){ functionPoint fun;---------------------------定义指针 fun = a;-------------------------------------赋值 fun(1,2);---------------------------------使用
}函数就是这个函数的指针.

⑺ C语言指针函数

不是这样

match函数名前的char* 是表示match函数结束时返回的值是一个字符专串(char*), 如果把match前的*去掉, 即 char match( ......), 是表示match函数返属回的值是一个字符(char), 那么你在match函数最后的return 语句要用相对应的数据类型

⑻ 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()的返回值

⑼ C语言函数指针定义

在最上面加一句这样的定义
typedef void*(*pFn)();
pFn可以这样理解:首先pFn是一个指针,指针指专向一属个函数(或者说pFn是一个函数指针),此函数返回一个无类型的指针。最终定义的变量及函数都是指针罢了,不过是指针的类型不同。所以在编译时会有警告,说指针类型不匹配。但对于程序来讲,都是可以在特定的上下文中使用的。
运行结果是
t1,t2交替出现。

其实void也可以换为其它的类型如int, double等

又想到一个很好的办法:
这次编译不会有警告,运行也不会出错。
示例代码如下所示
#include <stdio.h>

long t1();
long t2();

int main()
{
long(*fn)()= (long (*)()) t1 ;

while(1){
fn = (long (*)()) fn();
}
}

long t1()
{
printf("t1\n");
return (long)t2 ;
}

long t2()
{
printf("t2\n");
return (long)t1 ;
}

⑽ C语言函数指针怎么用

有函数: int fun(int a,int b);
要定义指向该函数的指针
对比指向 int a; 的指针
int *p; p = &a;
p的定义是怎么来的?
首先要保证p是一专个指针类型属
写下(*p),
然后,考虑下p的基类型,
p的基类型就是变量a的类型int
将int 放在(*p)前面就行了
int (*p);
括号可以省略,就成了 int *p;

同理
想要实现 pf = &fun;
(*pf) 将pf定义为一个指针,
将fun的类型作为pf的基类型
fun相当于一个 int (int a,int b)类型的量
int (int a,int b) (*pf);
基类型中有圆括号和中括号要后移
int (*pf)(int a,int b) ;//括号不能省略
pf = &fun;
调用时
(*pf)(3,4); pf(3,4)都可以