免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3428 | 回复: 13
打印 上一主题 下一主题

[C] 看C和指针遇到的难题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-20 17:40 |只看该作者 |倒序浏览
我现在看 C和指针 ,已经是第二次认认真真看了,但每次看完做后面的习题,编程题目还可以做出来,但那些小知识点的问题,还是一头雾水,有的后面有答案,但看了答案也不是很了解。

   例如:
            表达式(a)和(b)的求值过程有什么区别? 如果有的话,区别在哪里? 假定offset 等于3;

                             int i[10];
                             int *p=&i[0];
                             int offset
                              

                             p+=offset ;  (a)
                             p+=3;          (b)

         我看到这个题目时,我的理解是 offset是个变量,3是个常量,最终结果一样,没什么区别。

         C和指针里面有很多这种问题,都不是很理解,是不是去了解一下 汇编语言(我知道要学,一步一步来) 会有帮助,或者从其它方面去了解C或者从那些方面可以找到答案。

                                                                                                           非常感谢!!!

论坛徽章:
0
2 [报告]
发表于 2009-02-20 17:57 |只看该作者
最终结果是一样的,但是题目问的是求值过程啊

论坛徽章:
0
3 [报告]
发表于 2009-02-20 18:05 |只看该作者
原帖由 std_linux 于 2009-2-20 17:40 发表
我现在看 C和指针 ,已经是第二次认认真真看了,但每次看完做后面的习题,编程题目还可以做出来,但那些小知识点的问题,还是一头雾水,有的后面有答案,但看了答案也不是很了解。

   例如:
            表 ...

有什么区别?

论坛徽章:
0
4 [报告]
发表于 2009-02-20 19:09 |只看该作者
gcc -S 看看汇编结果。
建议楼主看看《深入理解计算机系统》这本书。:)

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
5 [报告]
发表于 2009-02-20 21:24 |只看该作者
如果学过汇编就没这个问题了

论坛徽章:
0
6 [报告]
发表于 2009-02-21 08:42 |只看该作者
1)猜想:(b)可能只需一条立即数加法指令,(a)需要间接寻址且可能不止一条指令。
2)如果初学,只需理解:若p原先指向i[0],则p += 3后,指向了i[3]就行了。深层的,等学了汇编再说。
3)如果没有“假定offset 等于3”这句话,代码有毛病:不要使用未经初始化或赋值的变量!

论坛徽章:
0
7 [报告]
发表于 2009-02-21 08:46 |只看该作者
年轻人慢慢来.

论坛徽章:
0
8 [报告]
发表于 2009-02-21 11:22 |只看该作者
原帖由 scutan 于 2009-2-20 19:09 发表
gcc -S 看看汇编结果。
建议楼主看看《深入理解计算机系统》这本书。:)


还有一本叫 《深入理解计算机》 的

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
9 [报告]
发表于 2009-02-21 11:50 |只看该作者
原帖由 李某人 于 2009-2-21 11:22 发表


还有一本叫 《深入理解计算机》 的



跟计算机组成原理有好大的区别?

论坛徽章:
0
10 [报告]
发表于 2009-02-21 12:10 |只看该作者
用VC的调试功能看一下就知了

p += offset
0040D4BC   mov         ecx,dword ptr [ebp-30h]
0040D4BF   mov         edx,dword ptr [ebp-2Ch]
0040D4C2   lea         eax,[edx+ecx*4]
0040D4C5   mov         dword ptr [ebp-2Ch],eax

而 p += 3;
0040D4E1   mov         ecx,dword ptr [ebp-2Ch]
0040D4E4   add         ecx,0Ch
0040D4E7   mov         dword ptr [ebp-2Ch],ecx

区别很明显
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP