界面模式
登录
注册
会员
帮助
加入收藏夹
客服微信
瑞星卡卡安全论坛
综合娱乐区
活动专区
实习生专区
实习生交流区
教你理解复杂的C指针
企业产品讨论区
瑞星安全云终端软件
瑞星ESM防病毒终端安全防护系统
瑞星杀毒软件网络版(含Linux)
瑞星智能沙箱分析/恶意代码威胁监测分析/上网行为管理
瑞星防毒墙5.0、瑞星下一代防火墙
瑞星虚拟化恶意代码防护系统
个人产品讨论区
瑞星之剑
瑞星防病毒安全软件
瑞星杀毒软件
瑞星个人防火墙V16
瑞星AI网络威胁检测引擎、威胁情报及网安知识图谱
瑞星其他产品
技术交流区
反病毒/反流氓软件论坛
可疑文件交流
恶意网站交流
入侵防御(HIPS)
系统软件
硬件交流
综合娱乐区
Rising茶馆
影音贴图
瑞星安全游戏
活动专区
本站站务区
站务
待审核
瑞星“1+2”全新解决方案巡展在广州画上圆满句号
叶院长揭秘:瑞星如何运用AI技术革新网络安全
俄乌冲突加剧网络攻击风险 白俄罗斯政府遭APT攻击
瑞星ESM防病毒系统助力矿业大学筑牢网络安全防线
实力拉满 瑞星第五十次通过VB100测评
请移步新论坛反馈问题或参与讨论
护航司法,瑞星助力山西省高院构建安全防线
人工智能在网络安全领域的风险和机遇
1
1
/ 1 页
跳转
页
[讲义] 教你理解复杂的C指针
收藏
本主题由
版主
狮子座小皮 于 2010-7-20 9:25:40 执行 设置高亮 操作
灵魂の低调
自信弱冠狮
帖子:
540
注册:
2010-05-19
来自:
发表于: 2010-07-19 21:09
|
只看楼主
短消息
资料
字号:
小
中
大
1楼
教你理解复杂的C指针
如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。
原文:
The right-left rule: Start reading the declaration from the innermost parentheses, go right, and then go left. When you encounter parentheses, the direction should be reversed. Once everything in the parentheses has been parsed, jump out of it. Continue till the whole declaration has been parsed.
译文如下:
右左法则:首先从最里面的圆括号看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。
我的博客:
http://www.echodjb.com
echodjb@gmail.com
分享到:
短消息
资料
加为好友
全部帖子
性别:
精华:
0
威望:
906
贡献:
97
金钱:
0
736270857
状态:
离线
等级:
灵魂の低调
自信弱冠狮
帖子:
540
注册:
2010-05-19
来自:
发表于: 2010-07-19 21:10
|
只看楼主
短消息
资料
字号:
小
中
大
2楼
回复: 教你理解复杂的C指针
1.
int (*func)(int *p);
首先找到那个未定义的标识符,就是func,它的外面有一对圆括号,而且左边是一个*号,这说明func是一个指针,然后跳出这个圆括号,先看右 边,也是一个圆括号,这说明(*func)是一个函数,而func是一个指向这类函数的指针,就是一个函数指针,这类函数具有int*类型的形参,返回值类型是 int。
2.
int (*func)(int *p, int (*f)(int*));
func
被一对括号包含,且左边有一个 *号,说明func是一个指针,跳出括号,右边也有个括号,那么func是一个指向函数的指针,这类函数具有int *和int (*)(int*)这样的形参,返回值为int类型。再来看一看func的形参int
(*f)(int*)
,类似前面的解释,f也是一个函数指针,指向的函数具有int*类型的形参,返回值为int。
灵魂の低调 最后编辑于 2010-07-19 21:11:28
我的博客:
http://www.echodjb.com
echodjb@gmail.com
短消息
资料
加为好友
全部帖子
性别:
精华:
0
威望:
906
贡献:
97
金钱:
0
736270857
状态:
离线
等级:
灵魂の低调
自信弱冠狮
帖子:
540
注册:
2010-05-19
来自:
发表于: 2010-07-19 21:12
|
只看楼主
短消息
资料
字号:
小
中
大
3楼
回复:教你理解复杂的C指针
3. int (*func[5])(int *p);
func 右边是一个[]运算符,说明func是一个具有5个元素的数组,func的左边有一个*,说明func的元素是指针,要注意这里的*不是修饰func的, 而是修饰func[5]的,原因是[]运算符优先级比*高,func先跟[]结合,因此*修饰的是func[5]。跳出这个括号,看右边,也是一对圆括 号,说明func数组的元素是函数类型的指针,它所指向的函数具有int*类型的形参,返回值类型为int。
我的博客:
http://www.echodjb.com
echodjb@gmail.com
短消息
资料
加为好友
全部帖子
性别:
精华:
0
威望:
906
贡献:
97
金钱:
0
736270857
状态:
离线
等级:
灵魂の低调
自信弱冠狮
帖子:
540
注册:
2010-05-19
来自:
发表于: 2010-07-19 21:13
|
只看楼主
短消息
资料
字号:
小
中
大
4楼
回复:教你理解复杂的C指针
4. int (*(*func)[5])(int *p);
func 被一个圆括号包含,左边又有一个*,那么func是一个指针,跳出括号,右边是一个[]运算符号,说明func是一个指向数组的指针,现在往左看,左边有 一个*号,说明这个数组的元素是指针,再跳出括号,右边又有一个括号,说明这个数组的元素是指向函数的指针。总结一下,就是:func是一个指向数组的指 针,这个数组的元素是函数指针,这些指针指向具有int*形参,返回值为int类型的函数。
我的博客:
http://www.echodjb.com
echodjb@gmail.com
短消息
资料
加为好友
全部帖子
性别:
精华:
0
威望:
906
贡献:
97
金钱:
0
736270857
状态:
离线
等级:
灵魂の低调
自信弱冠狮
帖子:
540
注册:
2010-05-19
来自:
发表于: 2010-07-19 21:13
|
只看楼主
短消息
资料
字号:
小
中
大
5楼
回复:教你理解复杂的C指针
5. int (*(*func)(Int *p))[5];
func是一个函数指针,这类函数具有int*类型的形参,返回值是指向数组的指针,所指向的数组的元素是具有5个int元素的数组。
我的博客:
http://www.echodjb.com
echodjb@gmail.com
短消息
资料
加为好友
全部帖子
性别:
精华:
0
威望:
906
贡献:
97
金钱:
0
736270857
状态:
离线
等级:
灵魂の低调
自信弱冠狮
帖子:
540
注册:
2010-05-19
来自:
发表于: 2010-07-19 21:14
|
只看楼主
短消息
资料
字号:
小
中
大
6楼
回复:教你理解复杂的C指针
6. 要注意有些复杂指针声明是非法的,例如:
int func(void) [5];
func是一个返回值为具有5个int元素的数组的函数。但C语言的函数返回值不能为数组,这是因为如果允许函数返回值为数组,那么接收这个数组的内容的 东西,也必须是一个数组,但C语言的数组名是一个右值,它不能作为左值来接收另一个数组,因此函数返回值不能为数组。
int func[5](void);
func是一个具有5个元素的数组,这个数组的元素都是函数。这也是非法的,因为数组的元素除了类型必须一样外,每个元素所占用的内存空间也必须相同,显 然函数是无法达到这个要求的,即使函数的类型一样,但函数所占用的空间通常是不相同的。
我的博客:
http://www.echodjb.com
echodjb@gmail.com
短消息
资料
加为好友
全部帖子
性别:
精华:
0
威望:
906
贡献:
97
金钱:
0
736270857
状态:
离线
等级:
RisingInternElit
强壮不惑狮
帖子:
1483
注册:
2010-05-28
来自:
゛菩提樹下
发表于: 2010-07-20 11:07
|
短消息
资料
字号:
小
中
大
7楼
回复:教你理解复杂的C指针
诶,这个要是不懂,C语言学的就有问题了。
﹎﹎﹎﹎﹎.☑.林花謝了春紅.太匆匆.,☂,.無奈朝来寒雨.晩来風.☑.﹎﹎﹎﹎﹎
--->>罒鄭重承諾:
◥◤ 勵志苡“博學之,審問之,慎思之,明辯之,篤行之”為目標而奮鬥終生 ◥◤
--->>罒簽: ゛菩提樹下.
短消息
资料
加为好友
全部帖子
性别:
精华:
1
威望:
2088
贡献:
235
金钱:
0
617928803
状态:
离线
等级:
最硬的石头
版主
帖子:
4140
注册:
2008-07-24
来自:
发表于: 2010-07-20 19:45
|
短消息
资料
字号:
小
中
大
8楼
回复:教你理解复杂的C指针
实际编程中谁会用这种指针呢
短消息
资料
加为好友
全部帖子
性别:
生日:
1988-8-9
精华:
0
威望:
6799
贡献:
113.29
金钱:
3.75
10000
状态:
离线
等级:
荔枝饭饭
自信弱冠狮
帖子:
454
注册:
2010-06-26
来自:
发表于: 2010-07-20 22:30
|
短消息
资料
字号:
小
中
大
9楼
回复:教你理解复杂的C指针
指针应该是安全性差的东西,好多病毒就是利用指针乱窜,实际编程用不到也
~木~
短消息
资料
加为好友
全部帖子
性别:
精华:
0
威望:
824
贡献:
6
金钱:
0
状态:
离线
等级:
<<
上一主题
|
下一主题
>>
1
1
/ 1 页
跳转
页
论坛跳转...
企业产品讨论区
瑞星安全云终端软件
瑞星ESM防病毒终端安全防护系统
瑞星杀毒软件网络版(含Linux)
北方区
华东区
华南区
木马入侵拦截有奖体验专区
瑞星2009版查杀引擎测试
瑞星2009测试版问题反馈
瑞星杀毒软件2009公测
瑞星个人防火墙2009公测
瑞星全功能安全软件2009公测
瑞星智能沙箱分析/恶意代码威胁监测分析/上网行为管理
瑞星防毒墙5.0、瑞星下一代防火墙
瑞星虚拟化恶意代码防护系统
个人产品讨论区
瑞星之剑
瑞星防病毒安全软件
瑞星杀毒软件
瑞星安全联盟论坛
瑞星杀毒软件V16+
V16+新引擎测试专区
瑞星全功能安全软件
瑞星杀毒软件2011
瑞星个人防火墙V16
广告过滤
瑞星个人防火墙2011
瑞星AI网络威胁检测引擎、威胁情报及网安知识图谱
瑞星其他产品
瑞星手机安全助手
瑞星路由安全卫士
路由系统内核漏洞
APP保镖
瑞星安全浏览器
瑞星安全助手
卡卡上网安全助手
瑞星软件管家
瑞星加密盘
账号保险柜5.0
瑞星专业数据恢复
技术交流区
反病毒/反流氓软件论坛
菜鸟学堂
安全技术讨论
可疑文件交流
恶意网站交流
瑞星云安全网站联盟专版
每日网马播报
入侵防御(HIPS)
系统软件
硬件交流
综合娱乐区
Rising茶馆
影音贴图
瑞星安全游戏
凡人修真
华人德州扑克
一球成名
星际世界
神仙道
赢家竞技
梦幻飞仙
三国演义
仙落凡尘
秦美人
攻城掠地
女神联盟
风云无双
傲视九重天
深渊
魅影传说
热血屠龙
雷霆之怒
大天使之剑
传奇霸业
无上神兵
斗破沙城
全民裁决
蛮荒之怒2
活动专区
瑞星积分商城
实习生专区
实习生交流区
实习生签到区
实习生考核区
“安全之狮”校园行活动专版
历史活动
论坛9周年活动专区
关注灾情 同心抗灾
本站站务区
站务
版主之家[限]
禁言禁访记录
待审核
瑞星客户俱乐部[限]
卡卡论坛新手入门
2022网民网络安全感满意度调查活动,诚邀您的参与!
年后勒索病毒活跃 瑞星提供全面分析与防范建议
在高分屏电脑运行Photoshop CS6,程序界面字体过小的问题有解啦~~~by baohe
招贤纳士 网罗人才——瑞星网安欢迎您的加入
招贤纳士 网罗人才——瑞星网安欢迎您的加入
瑞星杀毒软件V17的个人介绍 by dg1vg4
iMac一体机装MAC/WIN10双系统的亲身体验 by baohe
瑞星杀毒软件V17的个人介绍 by dg1vg4
我的主题
我的帖子
我的精华
我的好友
文本模式