永发信息网

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

答案:6  悬赏:0  手机版
解决时间 2021-01-25 19:22
vod * func(void) {}
最佳答案
函数指针告诉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 typedefvoid(*pFunc)();   voidfunc1() {     printf("This is func1\n"); }   intmain(void) {     pFunc p = func1;     p();         return0; }
呵呵,看来你学得挺深啦!:) ----------------------- 假设函数定义如下 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);
我们知道执行指针是危险的,执行指针很容易就会现在指针越界问题,如果是赋值操作将会对系统造成很大的危险,相信每一个程序员都会用指针取数时取过不属于自已定义的内存单元,c#里都摈弃了指针……可想而知指针的意义是不大的,完成可以用数组来代替。在c中看来,指针是完全可以替代数组的,但数组有什么它自已的优点呢?1.当你想定义一组数据变量时,十个变量?或许你还可以每个变量给它取个名字,可如果是100个,1000个呢?1000个的指针变量,每个指针你就给它取名都取到头痛,别说编写程序了。或许你会反驳,用指针动态申请也可以,很明显如果你用指针来替代数组,这时指针就不能移动了,因为一移动,它就乱了,你就不知道当前指针是指向哪里下一个内存单元又是哪里了,如果不能移动,指针也就失去了它的意义了……还有如果申请的不是连续的内存空间,比哪1000个连续的1000个单元的内存空间块呢?你是不是还得定义1000个指针变量来动态申请内存,而用数组你就可以避免,你只要定义1000个数组指针,再用循环实现动态申请就可以。2.数组定义的是一组连续的内存空间,可以说每个单元都有自已的变量名(数组名+下标)……这样如果执行越界操作时,程序将会报错……3.还有就是用数组申请一组连续的内存空间明显要比用指针动态申请空间要简单得多……4.再者数组是用到很多的,如果你全部都用针指来代替,我们知道执行指针是危险的,多一个针指操作就多一分危险,你能保证,程序编写一次就能正常运行,你这么多的针指就不会指向一些重要的系统或用户数组去操作?*只要你编写的程序够多,不难发现,数组远比指针要简单得多……
返回指针函数的原型:类型名*函数名(参数列表); 如果按照你的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"); }
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; } 楼主可以慢慢体会,不懂再问吧
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
丰巢快递(天钥桥南路1199弄滨江小区北一门丰
广发双币卡怎么还款
怎么启动极速迅雷,原来只有一个迅雷7,莫名
宝中旅游(建设路口营业)地址在什么地方,我要
看了这题解析有点不明白,怎么知道F1一定是较
各位帮我看看,湛江汽车技工学校,好不好,正
文言文全文翻译白话文:“梁国杨氏子九岁,甚
丰巢快递(沪太路1051弄青橙公寓1楼丰巢快递)
成语予取予夺的意思是什么啊?有知道释义的请
宝中旅游地址好找么,我有些事要过去
丰巢快递(朱家角中学丰巢快递)地址在什么地方
生男生女完全决定于母亲×.
公司做软件测试需要哪些资质。
云南农村可以用联通卡4g吗会不会没有信号?
怎样求边际效用
推荐资讯
快递自提柜驿站地址在什么地方,我要处理点事
为什么自来水有时会发黄或出现铁锈水?
沙堰镇中心小学地址在哪,我要去那里办事
急诊应进行哪些主要检查?A.血常规B.腹部平片
中华宾馆(周口太康)地址好找么,我有些事要过
尚好居宾馆怎么去啊,我要去那办事
一到晚上就想哭,我不知道为什么
顺丰快递能送到四川省绵阳市北川县擂鼓镇吗?
PROE5做装配的剖面时如何使一些零件不剖?(不
请问朋友们,古代时的明月楼是什么意思
工程施工中见证取样试件要作为质量验收的依据
2010年6月l日农历是哪一天,什么星座
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?