c语言的函数指针举个例子
答案:6 悬赏:0 手机版
解决时间 2021-01-25 19:22
- 提问者网友:暗中人
- 2021-01-25 07:34
vod * func(void) {}
最佳答案
- 五星知识达人网友:酒醒三更
- 2021-01-25 08:40
函数指针告诉CPU下一步需要执行哪里的代码的指针, 一数组十分相像.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
voidfunction(inti, doubled) //一个函数的声明
{
printf("函数运行, %d, %lf\n", i, d);
}
voidAnotherFunction(inti, doubled) //另外一个函数声明
{
printf("又一个函数运行, %d, %lf\n", i, d);
}
intmain()
{
void(*pFun)(int, double); //定义了一个函数指针
int(*p)(int, double); //用于调试的函数指针
pFun = function; //让这个函数指针指向第一个函数
pFun(10, 10.101); //通过这个函数指针来调用第一个函数
pFun = AnotherFunction; //让这个函数指针指向第二个函数
pFun(20, 20.202); //通过这个函数指针来调用第二个函数
//若将以下代码取消注释, 就会产生错误
//这个实验中, 直接用函数名来赋值了, 是因为函数名其实就是这个函数的指针
//而在平常调用函数时, 都要加上(), 如:printf("");
//这里, "()"就相当于'*'(就是取值运算符), printf是函数指针, 就相当于是数组名, 即数组的首地址
return0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
voidfunction(inti, doubled) //一个函数的声明
{
printf("函数运行, %d, %lf\n", i, d);
}
voidAnotherFunction(inti, doubled) //另外一个函数声明
{
printf("又一个函数运行, %d, %lf\n", i, d);
}
intmain()
{
void(*pFun)(int, double); //定义了一个函数指针
int(*p)(int, double); //用于调试的函数指针
pFun = function; //让这个函数指针指向第一个函数
pFun(10, 10.101); //通过这个函数指针来调用第一个函数
pFun = AnotherFunction; //让这个函数指针指向第二个函数
pFun(20, 20.202); //通过这个函数指针来调用第二个函数
//若将以下代码取消注释, 就会产生错误
//这个实验中, 直接用函数名来赋值了, 是因为函数名其实就是这个函数的指针
//而在平常调用函数时, 都要加上(), 如:printf("");
//这里, "()"就相当于'*'(就是取值运算符), printf是函数指针, 就相当于是数组名, 即数组的首地址
return0;
}
全部回答
- 1楼网友:患得患失的劫
- 2021-01-25 13:05
1
2
3
4
5
6
7
8
9
10
11
12
13
14
typedefvoid(*pFunc)();
voidfunc1()
{
printf("This is func1\n");
}
intmain(void)
{
pFunc p = func1;
p();
return0;
}
- 2楼网友:纵马山川剑自提
- 2021-01-25 11:30
呵呵,看来你学得挺深啦!:)
-----------------------
假设函数定义如下
int func( int a, int b)
{
return a+b;
}
-------------------------
1)声明一个指针变量 pFunc,该变量指向函数func
int (*pFunc) (int, int);
2)给pFunc赋值: pFunc = func (或者 pFunc = &func)
3)使用pFunc:
int result;
result = pFunc(1, 2);
- 3楼网友:第幾種人
- 2021-01-25 10:44
我们知道执行指针是危险的,执行指针很容易就会现在指针越界问题,如果是赋值操作将会对系统造成很大的危险,相信每一个程序员都会用指针取数时取过不属于自已定义的内存单元,c#里都摈弃了指针……可想而知指针的意义是不大的,完成可以用数组来代替。在c中看来,指针是完全可以替代数组的,但数组有什么它自已的优点呢?1.当你想定义一组数据变量时,十个变量?或许你还可以每个变量给它取个名字,可如果是100个,1000个呢?1000个的指针变量,每个指针你就给它取名都取到头痛,别说编写程序了。或许你会反驳,用指针动态申请也可以,很明显如果你用指针来替代数组,这时指针就不能移动了,因为一移动,它就乱了,你就不知道当前指针是指向哪里下一个内存单元又是哪里了,如果不能移动,指针也就失去了它的意义了……还有如果申请的不是连续的内存空间,比哪1000个连续的1000个单元的内存空间块呢?你是不是还得定义1000个指针变量来动态申请内存,而用数组你就可以避免,你只要定义1000个数组指针,再用循环实现动态申请就可以。2.数组定义的是一组连续的内存空间,可以说每个单元都有自已的变量名(数组名+下标)……这样如果执行越界操作时,程序将会报错……3.还有就是用数组申请一组连续的内存空间明显要比用指针动态申请空间要简单得多……4.再者数组是用到很多的,如果你全部都用针指来代替,我们知道执行指针是危险的,多一个针指操作就多一分危险,你能保证,程序编写一次就能正常运行,你这么多的针指就不会指向一些重要的系统或用户数组去操作?*只要你编写的程序够多,不难发现,数组远比指针要简单得多……
- 4楼网友:鸽屿
- 2021-01-25 09:54
返回指针函数的原型:类型名*函数名(参数列表);
如果按照你的vod * func(void) {}感觉不太对。既然有返回值(指针),怎么会是void呢。所以显示不对。
下面写了一个返回指针值的函数的例子。你可参考下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
char*func(void)
{
staticchara[20]="Hello,C language.";
returna;
}
voidmain(void)
{
char*p;
p=func();
while(*p)
printf("%c",*p++);
printf("\n");
}
- 5楼网友:山河有幸埋战骨
- 2021-01-25 09:27
mxl033 回答是对的。
void* func(void)这种不是函数指针,而只是一个返回一个指针的函数而不是指针。
typedef void (*pFunc)(); // 函数指针类型声明,指向的是无返回无参数的函数.
typedef int (*pFunc1)(int,int); // 函数指针类型声明,指向的是返回int型,参数有两个int型的函数。
void func1()
{
printf("This is func1\n");
}
int add(int a, int b)
{
return a + b;
}
int main(void)
{
pFunc p = func1; // 函数指针复制
p();
// p = add; 错误,返回类型,和参数都不符合
pFunc1 p1 = add;
p1(1,2) // 返回3
return 0;
}
楼主可以慢慢体会,不懂再问吧
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯