免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7162 | 回复: 23

数组名是左值(lvalue)的疑问 [复制链接]

论坛徽章:
0
发表于 2009-12-23 17:14 |显示全部楼层
对于数组名是左值,在《C Programming FAQs》有如下说明:

The term "lvalue " doesn 't quite mean "something you can assign to "; a better definition is "something that has a location(in memory)." The ANSI/ISO C Standard goes on to define a 'modifiable lvalue'; an array is not a modifiable lvalue.

在《Expert C Programming》中亦有相应说明,总之含义是:数组名是左值,只不过是不可修改的(unmodifiable)左值。

我的疑问是:
根据上述说明,左值应在内存中占有空间(something that has a location(in memory) ),可是众所周知,数组名是存在于符号表(symbol table)中,这如何解释呢?

求教,谢谢~

论坛徽章:
0
发表于 2009-12-23 17:29 |显示全部楼层
数组名做左值时候指的是数组整个区域内存,而非第一个元素

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2009-12-23 17:38 |显示全部楼层

回复 #1 thinshootout 的帖子

是否占用内存, 是否存在于符号表中, 是2个正交的概念


xxx.c

int global_variable;       // 占用内存, 且符号表中存在
int global_array[1212]; // 占用内存, 且符号表中存在

void f(void)
{
      int local_variable;       // 占用内存, 符号表中不存在
      int local_array[1212]; // 占用内存, 符号表中不存在
}

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
发表于 2009-12-24 08:34 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2009-12-24 09:15 |显示全部楼层
原帖由 OwnWaterloo 于 2009-12-23 17:38 发表
是否占用内存, 是否存在于符号表中, 是2个正交的概念


xxx.c

int global_variable;       // 占用内存, 且符号表中存在
int global_array[1212]; // 占用内存, 且符号表中存在

void  ...


如果local_array不存在symbol table中,编译器会把它放在哪里呢?

论坛徽章:
0
发表于 2009-12-24 09:16 |显示全部楼层
原帖由 pmerofc 于 2009-12-24 08:34 发表
我反对“数组名是左值”这种说法
我觉得正确的说法应该是“数组名(可以)是左值”
是不是左值
在很多情况下是无法孤立地确认的
(“5”就一定只能是右值)
脱离具体的CONTEXT
不能断言数组名是不是左值
...


你可以这么理解,但我觉得概念上还是按标准走比较好~

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
发表于 2009-12-24 09:33 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2009-12-24 10:45 |显示全部楼层
数组名是左值,为啥不能做右值?

论坛徽章:
0
发表于 2009-12-24 10:58 |显示全部楼层
原帖由 thinshootout 于 2009-12-24 09:15 发表


如果local_array不存在symbol table中,编译器会把它放在哪里呢?


如果 local 的变量不存在 symbol table 中,编译器会把它放在哪里呢?

论坛徽章:
0
发表于 2009-12-24 11:17 |显示全部楼层
原帖由 thinshootout 于 2009-12-24 09:15 发表


如果local_array不存在symbol table中,编译器会把它放在哪里呢?


呵呵 高人是不会回答你这样的问题的

局部变量是放在栈里的,每个函数都有自己的栈帧,出了这个函数,函数里定义的变量
就释放了,看不见了

局部变量是不需要进行连接的

我是菜鸟  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP