免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zx_wing
打印 上一主题 下一主题

大家来看看这个程序,解释出原因了就明白指针和数组的区别了(程序很短) [复制链接]

论坛徽章:
0
31 [报告]
发表于 2006-12-18 13:30 |只看该作者
贴出来看看不就行了吗
我推测优化时可以什么都不做,

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
32 [报告]
发表于 2006-12-18 13:32 |只看该作者
原帖由 mik 于 2006-12-18 13:21 发表


zx_wing这位朋友还是推测出来的,即使是放在 eax 也不能说明什么问题,gcc 根据情况而定

想要深入了解清楚,看gcc实现代码

这句话在理,解释多了反而不如看编译器的代码(毕竟不是能理解的就能讲明白
等读完了,愕然回首,灯火阑珊处,其实就是指针。:em11:

论坛徽章:
0
33 [报告]
发表于 2006-12-18 14:10 |只看该作者
>> 编译过后,初始化操作会被转换成一个立即数操作,例如:
>> mov 1, %eax

这是加了优化之后的情况吧?

优化是一种等价实现,强调的是结果的对等性,其具体的实现过程没有可比性,一般不能用来说明原代码的情况。还是看没有优化下的汇编吧。

论坛徽章:
0
34 [报告]
发表于 2006-12-18 14:15 |只看该作者
原帖由 whyglinux 于 2006-12-18 14:10 发表
>> 编译过后,初始化操作会被转换成一个立即数操作,例如:
>> mov 1, %eax

这是加了优化之后的情况吧?

优化是一种等价实现,强调的是结果的对等性,其具体的实现过程没有可比性,一般不能用 ...


我已经在前面注释强调不优化的情况可能访存,但也不是不优化都会访存。这里强调这种行为的存在,不强调这种行为一定会发生。上面代码也有误,1没加$。我不在x86上工作,对这个不太熟,这个地方纠正一下。

论坛徽章:
0
35 [报告]
发表于 2006-12-18 16:28 |只看该作者
原因在于 extern 从来不检查类型,你在第二个文件里写:

extern char arr;
extern char* arr;
extern long arr;

编译,连接,运行,都不会报错。

论坛徽章:
0
36 [报告]
发表于 2006-12-22 14:56 |只看该作者
对同一对象的类型声明不一致是一种无定义行为。

>> 原因在于 extern 从来不检查类型

为了保证声明和定义的一致性,应该将声明单独放在一头文件中,在程序中进行声明此变量的时候要以包含头文件的方式进行(保证声明的一致性),在定义变量的文件中应该包含此头文件(这样可以在编译阶段检查出声明和定义是否一致)。

论坛徽章:
0
37 [报告]
发表于 2009-12-26 16:55 |只看该作者
学习

论坛徽章:
0
38 [报告]
发表于 2009-12-26 17:22 |只看该作者
哈哈哈,不得了不得了,这帖子都被挖坟出来了。
这还是当时我对C语言懵懂时发的,当时还有一系列和whyglinux争论的帖子。
后来事实证明了我那时候确实对很多概念搞不清楚,whyglinux对标准是真了解。

论坛徽章:
0
39 [报告]
发表于 2009-12-26 18:11 |只看该作者
为什么地址不一样?
因为编译器做了手脚了!这个问题不是语言的范畴,而是编译器的实现细节!
按照模块来编译的模式,,第一个.c文件编译后,arr数组已经在模块内分配空间了,但是第二个.c文件中没有这个arr的位置信息,只有在连接的时候,才连接到第一个.o的文件里的字符数组的地址。。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
40 [报告]
发表于 2009-12-26 19:45 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP