一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3782|回复: 12

[其他综合] 函数指针和指针函数

[复制链接]
发表于 2013-10-18 13:54 | 显示全部楼层 |阅读模式
    函数指针和指针函数,听起来有点绕口,初次接触还真有点晕。函数的指针还比较好理解,但对于指针函数还真不太懂。现在只知道它是一个函数,是一个能返回指针地址的函数。对于它的定义方法及作用都不理解,以及应该怎样使用?看哪位能给说一说。看到的定义有:void(*a)();  void(*a)(int);   (int)(*a)();     这三者有什么区别?
发表于 2013-10-18 14:25 | 显示全部楼层
本帖最后由 icevel 于 2013-10-18 14:27 编辑

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

LZ的例子是函数指针吧?
int *pfun(int, int);
这个是指针函数。而且我感觉指针函数比较好理解吧?只是返回值的类型和普通函数不同。函数指针比较麻烦。
回复

使用道具 举报

发表于 2013-10-18 14:32 | 显示全部楼层
高等数学 不懂漂过
回复

使用道具 举报

发表于 2013-10-18 15:01 | 显示全部楼层
void(*a)();  void(*a)(int);
定义了两个函数指针(都是a),这两个函数指针指向的函数都无返回值,区别在于前者无参,后者有一个整型参数。

(int)(*a)();
同样是1个函数指针,指向的函数返回整型值且无参。
回复

使用道具 举报

发表于 2013-10-18 17:52 | 显示全部楼层
这东西还是别讨论的好,万一那个语言表达有歧义,那就引领你误入歧途了,我当时就是被两个同事给搞混了,自己好好看书,看一本理解不了,看两本,多看几遍,慢慢来、、、、、
回复

使用道具 举报

发表于 2013-10-18 18:30 | 显示全部楼层
慢慢的啃书吧,指针是c的难点,学懂了指针就学会了c
回复

使用道具 举报

发表于 2013-10-18 18:45 | 显示全部楼层
本帖最后由 lize91 于 2013-10-18 18:47 编辑

在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。

函数指针也即是指向函数的指针,既然是指针,那么她肯定是指向一种类型的,就像LZ声明的三个函数指针void(*a)();  void(*a)(int);   (int)(*a)(); 。由于a后面的括号的优先级是高于* 的,所以它就成了函数指针来,也就是指向函数的指针,假设你把括号去掉,比如说最后一个,就变成了int * a();这就变成了声明一个函数,返回值是int类型的指针。也就是你所说的指针函数!

至于指针函数这个称呼,我觉得大可不必,实际上它就是个函数而已,只不过返回值是指针罢了。

有点意思的倒是数组指针和指针数组,数组指针就是指向数组的指针,指针数组就是数组内元素都是指针类型的数组。


回复

使用道具 举报

发表于 2013-10-18 19:06 | 显示全部楼层
一句话,指针是某些东西(变量,函数,二进制,芯片端口物理位置)的首个字节的物理(地理?)【坐标】。
回复

使用道具 举报

发表于 2013-10-18 20:01 | 显示全部楼层
狗狗百里游 发表于 2013-10-18 19:06
一句话,指针是某些东西(变量,函数,二进制,芯片端口物理位置)的首个字节的物理(地理?)【坐标】。

1 指针是地址。
2 不一定是物理地址。

指针变量是装指针的。
回复

使用道具 举报

发表于 2013-10-18 20:25 | 显示全部楼层
lize91 发表于 2013-10-18 18:45
在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指 ...

100分。
不过实际使用的很少,谁编程去写那些这么搞脑子的函数
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2026-1-30 22:10 , Processed in 0.041182 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表