读书人

数组名有自各儿的空间吗

发布时间: 2013-06-26 14:29:32 作者: rapoo

数组名有自己的空间吗?
int arr[5];
请问arr有自己的空间吗?
数组名 纯C
[解决办法]
指针是一个变量,变量的值是另外一个变量的地址。那么,既然指针是变量,那么指针必然有自己的存储空间,只不过是该存储空间内的值是一个地址值,而不是别的内容。而数组名是数组的首元素的地址(即它是个地址常量),而不是用于存储地址变量值的指针变量.所以数组名是不需要存储空间的.
[解决办法]
所有的表识符号在运行时都已经消失,只有其值(比如枚举量)或地址(比如函数,数组,变量等)得以保留,说白了那些名字只是给我们自己看的。所以不占用空间。
[解决办法]
楼主这命题就歧义。arr[0]-arr[4]不算arr的空间?
好了不咬文嚼字,3楼如果是说你所谓的arr的空间,我理解是编译时要给arr分配符号表中的空间吧。。汇编里我记得对于数组是需要把首地址存起来的,不然每次使用数组元素都硬编码地址的话有效率问题
[解决办法]
楼主别看国产的垃圾书了.
看C PRIMER去吧.

数组名不是指针.
[解决办法]
10楼所犯错误是,把编译器为进行编译而使用的临时内存空间与语言为其使用的实体所分配的空间混为一谈,为利于编译而使用的临时存储并不是语言的一部分。这种错误认识本质上就是从汇编理解C/C++导致的。

验证的方法非常简单,&a只会得到a所代表的数组对象的地址,到无法得到编译器为其分配的临时空间地址,因为这个临时空间根本就不是语言的一部分。
[解决办法]
这个问题提得不规范 你说的数组名 空间
[解决办法]
偶也想写得浅出,但是通俗的语言只会造就更多歧义,无法不用专业术语,如果你有疑问或者不同意见,一起讨论就是。
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

楼主别看国产的垃圾书了.
看C PRIMER去吧.

数组名不是指针.

还是别用“指针”这种歧义的词了。其实数组名说它是不是指针都行,看你使用指针的广义语义还是狭义语义。。。


看了正规的书之后,你就知道 指针没有广义狭义. 指针就是指针.

临时地,你可以看一下这里:
http://blog.csdn.net/supermegaboy/article/category/622235

这属于咬文嚼字,本身就没什么实际意义。
我觉得最广义的说,凡是“代表一个地址的东西”都叫指针。
我们关心的也只是“数组名可以当做指针使用”,而不是“数组名是不是指针”这个问题本身,纠结指针的定义有意义么?
至于那个常量的提法就更没有实际意义了。语法上不是常量而是只读变量,这没错。但有的const常量,语法上是常量,内部又是使用只读变量的底层实现,非要绕这个语法层面只会越说越陷入脱离实际的文字游戏。我们关心的是“数组名不能被改变”这就够了,管它在文字意义上是不是常量干嘛?


程序设计不是搞文学, 不是你理解是怎么样就是怎么样. 文学上你可以把明月光 说成 地上霜.
但是学术上月光就是月光, 霜就是霜. 人家在讨论赏月, 你非要说成赏霜. 这怎么交流?

标准的意义,是定义了 C语言. 它说C语言是怎么样就是怎么样. 不是你理解成什么样就是什么样. 不然你无法跟其他学习了标准的C语言的人交流. 也不能游刃有余地使用尊循着标准而做出来的编译器.

常量也好,指针也好,或是C语言的其他概念,它的定义都有非常重要的意义.
你可以想一下,C语言的标准只有几百页,却定义了 整个C 语言的机制.可以说已经简化得不能再简化了,它会无理取闹,没事找事的定义一些文字游戏??


问题是这种文字层面的标准,在编程层面,很多东西根本就是多余而无需深究的。如果一种从文字意义上并不正确的理解,却有助于对编程层面的理解,那就这样又何妨?我们是写代码的,不是研究标准的。

读书人网 >C语言

热点推荐