鱼C论坛

 找回密码
 立即注册
查看: 1326|回复: 3

[已解决]C语言指针结合性与优先级

[复制链接]
发表于 2020-5-22 06:11:49 | 显示全部楼层 |阅读模式
10鱼币
昨天看到这样一个指针,((int(*)(void))&str)()居然还有实际做用,发现学指针不能只靠背了,要学习指针的原理,求大神以这个指针为例,教我一下指针的原理,怎样通过优先级,结合性来看这个指针?
最佳答案
2020-5-22 06:11:50
((int(*)(void))&str)();
首先找到变量名str;接着查看其右侧有无[];无
遇到右侧第一个括号
查看左侧发现有取地址符,这就证明需要用到的是str所在的地址;
再次往左发现(int(*)(void)())这个函数指针类型;//可以用typedef int(* FuncPtr) (void);简化表达
证明其将刚刚取得的地址强制类型转换成一个函数指针;
最后遇到左半边括号。再看括号外就剩下()
意味着将刚刚强制类型转换来的地址当成了函数使用。
综上,str可能是一个函数名

最佳答案

查看完整内容

((int(*)(void))&str)(); 首先找到变量名str;接着查看其右侧有无[];无 遇到右侧第一个括号 查看左侧发现有取地址符,这就证明需要用到的是str所在的地址; 再次往左发现(int(*)(void)())这个函数指针类型;//可以用typedef int(* FuncPtr) (void);简化表达 证明其将刚刚取得的地址强制类型转换成一个函数指针; 最后遇到左半边括号。再看括号外就剩下() 意味着将刚刚强制类型转换来的地址当成了函数使用。 综上,str可能 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-22 06:11:50 | 显示全部楼层    本楼为最佳答案   
((int(*)(void))&str)();
首先找到变量名str;接着查看其右侧有无[];无
遇到右侧第一个括号
查看左侧发现有取地址符,这就证明需要用到的是str所在的地址;
再次往左发现(int(*)(void)())这个函数指针类型;//可以用typedef int(* FuncPtr) (void);简化表达
证明其将刚刚取得的地址强制类型转换成一个函数指针;
最后遇到左半边括号。再看括号外就剩下()
意味着将刚刚强制类型转换来的地址当成了函数使用。
综上,str可能是一个函数名

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
〃忝書γě渎ぐ + 1 + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-22 10:13:37 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-22 14:05:47 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 17:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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