社区
C语言
帖子详情
关于函数指针的初始化
xidianxiancai
2009-01-05 06:18:45
int (*pf)(int)=&f;
这个声明创建了函数指针pf,并把它初始化为指向函数f。
请问我能否用int (*pf)(int)=f;来实现同样的功能(即去掉&)。
我认为是一样的。因为函数名和地址实际上是一样的。就如同:定义一个变量int a;那么变量名a与&a表示的是同一个地址。
我不知道我的理解是否正确?请指教。谢谢!
...全文
408
18
打赏
收藏
关于函数指针的初始化
int (*pf)(int)=&f; 这个声明创建了函数指针pf,并把它初始化为指向函数f。 请问我能否用int (*pf)(int)=f;来实现同样的功能(即去掉&)。 我认为是一样的。因为函数名和地址实际上是一样的。就如同:定义一个变量int a;那么变量名a与&a表示的是同一个地址。 我不知道我的理解是否正确?请指教。谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
largehardo
2009-01-06
打赏
举报
回复
mark
caremsi
2009-01-06
打赏
举报
回复
mark.
int (*pf)(int)=&f;
貌似&在这里不是引用,是地址符哦,不能去掉吧
nicholasfly
2009-01-06
打赏
举报
回复
up
青葱岁月不可追
2009-01-06
打赏
举报
回复
学习
nullah
2009-01-06
打赏
举报
回复
[Quote=引用 9 楼 lbh2001 的回复:]
引用楼主 xidianxiancai 的帖子:
int (*pf)(int)=&f;
这个声明创建了函数指针pf,并把它初始化为指向函数f。
请问我能否用int (*pf)(int)=f;来实现同样的功能(即去掉&)。
我认为是一样的。因为函数名和地址实际上是一样的。就如同:定义一个变量int a;那么变量名a与&a表示的是同一个地址。
我不知道我的理解是否正确?请指教。谢谢!
对函数部分的理解是对的,即使你写为f,编译器也会转换为&f但后面是错的
定义…
[/Quote]
up
thecorr
2009-01-05
打赏
举报
回复
可以
zenny_chen
2009-01-05
打赏
举报
回复
[Quote=引用 11 楼 frankli2009 的回复:]
结帖率:0.00%
[/Quote]
呵呵。恐怕是楼主不知道“结贴”这个概念吧。
不过就函数而言,其特性与数组差不多吧,直接使用标识符表示一个存储块的首地址。
不过我个人在实际使用时习惯上会加上取地址符——“&”;这确切地表明了是函数地址。
在通过函数指针来进行间接调用时,我会使用(*pf)(0);尽管pf(0)也没问题。
frankli2009
2009-01-05
打赏
举报
回复
结帖率:0.00%
china_west
2009-01-05
打赏
举报
回复
帮顶
lbh2001
2009-01-05
打赏
举报
回复
[Quote=引用楼主 xidianxiancai 的帖子:]
int (*pf)(int)=&f;
这个声明创建了函数指针pf,并把它初始化为指向函数f。
请问我能否用int (*pf)(int)=f;来实现同样的功能(即去掉&)。
我认为是一样的。因为函数名和地址实际上是一样的。就如同:定义一个变量int a;那么变量名a与&a表示的是同一个地址。
我不知道我的理解是否正确?请指教。谢谢!
[/Quote]
对函数部分的理解是对的,
即使你写为f,编译器也会转换为&f
但后面是错的
定义一个变量int a;那么变量名a与&a表示的是同一个地址。 ----》a在作为左值的时候才是地址,作为右值的时候是内容,&a始终是地址
xiaoyisnail
2009-01-05
打赏
举报
回复
摘自c++ primer:
可使用函数名对函数指针做初始化或赋值,此时,直接引用函数名等效于在函数名上应用取地址操作符
davelv
2009-01-05
打赏
举报
回复
16位机器中指针是2个字节的,32位机器中指针是4个字节的....
扯远了..
yellowhwb
2009-01-05
打赏
举报
回复
"int a;那么变量名a与&a表示的是同一个地址。"
这个不一定能这样说 ,a是内存中的一个空间,这个空间是4个字节大小的。&a是a的地址!
当然,如果非要把“变量名称”和“变量的值”分开说,也可以把“变量名称定义成&a,把“变量的值”说成内存中那4个字节的值
lann64
2009-01-05
打赏
举报
回复
c/c++的函数名和数组名是这样处理的。加不加&都可以。
davelv
2009-01-05
打赏
举报
回复
int a;
a表示的是一个整形数,而&a则表示该整形数的地址,不可混为一谈...
yellowhwb
2009-01-05
打赏
举报
回复
当然可以这样做,C语言中函数名就是函数的地址,就像数组一样,数组名就是数组的地址!
你甚至可以这样
int (*pf)(int)=*f;
或者
int (*pf)(int)=**f;
或者
int (*pf)(int)=**********f;
waizqfor
2009-01-05
打赏
举报
回复
[Quote=引用楼主 xidianxiancai 的帖子:]
int (*pf)(int)=&f;
这个声明创建了函数指针pf,并把它初始化为指向函数f。
请问我能否用int (*pf)(int)=f;来实现同样的功能(即去掉&)。
我认为是一样的。因为函数名和地址实际上是一样的。就如同:定义一个变量int a;那么变量名a与&a表示的是同一个地址。
我不知道我的理解是否正确?请指教。谢谢!
[/Quote]
可以怎么理解
davelv
2009-01-05
打赏
举报
回复
函数指针可以这样理解,但是普通变量不是这样的
函数指针赋值的时候即使不在函数前面加上&,编译器也认为是加了&来处理,不写&是为了简单...
C/C++ 指针的13份资料
C/C++ 指针的13份资料 内容丰富,让编程人员不再害怕指针
C/C++指针经典资料大全
C/C++指针经典资料大全,十余部经典资料书籍,是您精通C指针的理想教程。
函数指针
的定义和
初始化
关于
函数指针
的定义和
初始化
有两点需要注意: 1.括号不可少 在定义时*p必须用括号括起来,如果去掉括号代码变为: int *p(int ,int)//p是函数,而非
函数指针
,返回值类型为int * 正确地写法为int (*p)(int,int) 2.类型要匹配 在对
函数指针
初始化
或赋值的过程中,一定要保证函数的参数个数和类型与
函数指针
的定义相匹配。 int (*p)(int)=max...
函数指针
的
初始化
函数指针
的
初始化
C 指针的知识点(
初始化
,赋值,
函数指针
,指针++)
1)指针的
初始化
指针
初始化
目的就是让指针知道指向那个地址。第一种方法就是在定义指针的同时告诉指针指向的地址,第二中情况,不在定义指针的时候
初始化
,而是把地址直接赋值给指针变量。注意:不可以在指针不清楚指向地址的情况下给指针赋值(但是char p=0或者p=NULL除外,该语句表示指针为空)。 第一种方法:在指针定义的时候告诉指针指向的地址。 下面这样
初始化
就是错误的: 第二中情况:不在定义指...
C语言
70,037
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章