社区
C语言
帖子详情
关于函数指针*优先级的问题
gxy001
2003-09-13 12:31:16
我对函数指针*表示什么不甚理解,什么时候表示的是函数指针,什么时候只是返回值是一个指针而已?
...全文
79
9
打赏
收藏
关于函数指针*优先级的问题
我对函数指针*表示什么不甚理解,什么时候表示的是函数指针,什么时候只是返回值是一个指针而已?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
scpzhwang
2003-09-13
打赏
举报
回复
就是说可以返回指针值的函数称为指针函数。
比如:
char *trim(char *s)
{
shar *p=s+strlen(s)-1; //P指向s的最后一个字符
while(p-s>=0&& *p==' ')p--; //从后向前搜寻非空格字符
*(p+1)='\0'; //p指向最后一个非空格字符在其后置结束符
return s;
}
注意:指针函数所返回的指针不能指向函数返回后即不存在的对象,
如函数中的自动变量、形参变量等 。
gxy001
2003-09-13
打赏
举报
回复
如果再复杂一点的情况又该如何分析呢?
fwinfwin
2003-09-13
打赏
举报
回复
int (*fun)()是函数指针
int *fun()代表返回值是指针!
gxy001
2003-09-13
打赏
举报
回复
眼前一亮啊~
whz_time
2003-09-13
打赏
举报
回复
还有另一类函数指针考虑过吗?指向类成员函数的指针:看这个例子:
class c
{
protected:
int m_val;
public:
void setval(int val)
{
m_val = val;
}
int getval()
{
return m_val;
}
};
typedef void (c::*memfunc)(int);
void test()
{
c obj;
memfunc f;
f = obj.setval;
obj.(*f)(120);
ASSERT(120 == obj.getval());
}
gxy001
2003-09-13
打赏
举报
回复
UP
gxy001
2003-09-13
打赏
举报
回复
哦~~~原来是这样,有点明白了,小女子天资不够,有劳各位的地方还请多谅解。
Caoyu015
2003-09-13
打赏
举报
回复
结合优先级, 如:
int ( * ( ( *fn )( int ) ) )[]
// fn先和 *结合 代表是一个指针再和(int)结合代表该指针是一个函数指针,有一个int参数,然后再与外面的*结合代表 函数返回一个指针,该指针指向一个数组。 这就是优先级的结合过程了。
gxy001
2003-09-13
打赏
举报
回复
还需更详尽的分析和解答。谢谢。
函数指针
的调用
char fun(char *); main (){ char *s=“aaa”,a; char (*f)(char *)=fun; 正确的调用有两种: 第一种:f(&ch); 第二种:(*f)(s); 错误的调用: *f(s);这种调用是错误的 } 个人的理解是:f这个指针是指向fun这个函数的,那么(f)就是这个函数本身了,所以f和(f)都是代表了调用了这个函数,但是 * 和(),()的
优先级
会高于,所以f(s),相当于是先调用了函数f(),再解引用,f()本身就相当于是返回值了,不用在解引
C/C++如何快速区分指针数组|数组指针|
函数指针
|指针函数
如何区分这些概念,主要还是看后面两个字,中文表达模式“表语+定性名词”,所以关键的都是后面的这个名词: 指针数组:一个数组,数组元素是指针,如: int* p[20]; 数组指针:一个指针,指向一个数组,如:int(*p)[20];
函数指针
:一个指针,指向一个函数; 基本声明形式:返回数据类型 + (*函数名) + (变量类型1,…);
函数指针
声明的时候 * 需要和函数名用括号括起来(
优先级
问题
)。 如:int (*pFun)(int a, int b); 指针函数
【C】C里符号
优先级
的那些坑
【C】C里符号
优先级
的那些坑 最近准备在准备公司里的底层软件技能鉴定,作为每次面试笔试必考的坑,感觉很有必要好好复习一遍。 常见的有这几种坑: 指针与数组 这里要提到一种层层解析的方法。 1、先从最简单的开始 int *pf; 首先应该理解一下,“*”这个符号应该理解为“解地址”,即将地址转换成对应的数据。 这个例子暂时不用考虑
优先级
的事,所以含义是: * pf解地址后是...
函数指针
在回调里面的作用
函数指针
的定义语法稍显复杂,核心是把“函数名”替换成“(*指针名)// 格式:返回类型 (*指针变量名)(参数类型列表);// 解释:定义了一个名为pCompare的
函数指针
// 它指向的函数必须满足:返回int,接收两个int参数在编译期把被调用函数的代码直接“复制粘贴”到调用点,消除函数调用的开销(压栈、跳转、出栈)。回调函数的签名是固定死的(比如qsort的比较函数只能有2个参数),无法通过参数传递额外的“状态”(比如“比较时忽略大小写”的标志、“接近某个target”的目标值),只能用。
函数() 运算符(函数调用运算符)的
优先级
高于 *(解引用/指针)
C语言中
函数指针
与返回指针的函数存在语法差异: int *func() 声明返回int*的函数,func先与()结合。 int (*func()) 括号不改变解析顺序,等价于第一种形式。 (*func)() 表示func是一个
函数指针
,通过解引用调用目标函数。 注意括号位置决定声明含义,返回指针的函数与
函数指针
是不同概念。
C语言
70,038
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章