当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 关于C中数组名是不可修改的左值的探讨
帖子发表于 : 2012-04-14 12:32 
头像

注册: 2012-03-17 11:05
帖子: 138
送出感谢: 3
接收感谢: 0 次
事实上,char a[]="abc"和char *p="xyz"中a、p在编译器符号集中都有定义,a和“abc”的首地址对应而p和&p(也就是在内存中存储“xyz”首地址的地址)对应,这也是数组和指针的根本区别。对p赋值事实上是修改&p中被存储的地址,&p本身的值(也就是编译器符号集中与p对应的值)并没有变;而想对a赋值那就是对编译器符号集进行人为的修改,而我们知道数组名是不能被赋值的,所以我们是否可以得到一个结论:数组名是不可修改的左值的真正原因是编译器符号集内容系统不让你更改? :em06
最近看《C专家编程》有感。。。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 关于C中数组名是不可修改的左值的探讨
帖子发表于 : 2012-04-15 11:26 
头像

注册: 2008-01-22 23:24
帖子: 773
地址: 三亚
送出感谢: 1
接收感谢: 15
因为类型不一致。
之所以可以把数组名称赋值给指针,是因为这种情况下的数组名称退化成了指针。反之则不可以。
下面的帖子有比较详细的讨论。
http://stackoverflow.com/questions/9667 ... array-in-c


_________________
牛牛博客
linux 系统中 Chrome 地址栏输入卡顿的解决方法
Linux 下 MPV 和 VLC 播放器 VAAPI 显卡加速对比
---
using : openSUSE 13.2 ( 3.16.6-2 x86_64 ) , KDE 4.14.2


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 关于C中数组名是不可修改的左值的探讨
帖子发表于 : 2012-04-15 11:55 

注册: 2007-12-05 10:57
帖子: 1003
地址: 金山
系统: ubuntu14.04
送出感谢: 13
接收感谢: 62
数组名是不可修改的左值, 我认为就是编译器的语法规定而已,它必须让你指定进一座房子的哪扇门进哪一间屋子,虽然第一间屋子的门和整座房子的大门是同一扇门,你说我要进这座房子的第一扇门,放点东西进去,它会允许把东西放在第一个房间,你说我要进这座房子的大门,放点东西进去,它说:不行,没这规定,必须要报进第几号门。

不管是普通变量 ,数组变量, 还是指针变量,编译器都看作一块内存空间(地址),只是前两者放直接取用的内容,后者放一个转接,转接到真正取用内容的内存空间

理解这一点就够了


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 3 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译