数组名算变量么?

underuwing 2009-12-27 12:45:59
int a[10],a算变量还是常量?
...全文
778 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
gernal_dn 2009-12-28
  • 打赏
  • 举报
回复
数组名算变量么?
==================
唉!中国人总是有这样的本位思想,喜欢将东西各自归位。
实际上许多东西如果从不同的角度看,会有不同的答案。

不说其它的,单单“变量”一词就比较怪异,5楼说“变量的定义是一段命名的内存空间”,这也不算错,是教科书上的说法。但我大部分情况下是倾向于数学上的定义的,一个参数,代表着某种属性,理论上可变就是变量,理论上不可变,或限定条件下不可变,就是常量。为什么我倾向数学定义而不是程序语法定义?因为这样思维不必中断,否则写程序看程序就太累了......
phoebuslv 2009-12-27
  • 打赏
  • 举报
回复
是变量,只有数字、字符、字符串才算常量,如23、'I'、"you"是常量,而int I或char you就是变量,与其是不是数组无关
lovesi3344 2009-12-27
  • 打赏
  • 举报
回复
数组名其实也是一个指针,只不过是const指针,指向第一个元素。

数组名是数组首元素的地址,但是是常量地址(const指针),所以不能做左值,例如不能自增自减。

所以数组名不是变量,是“常量”??不,是只读变量!!!
JackDoge 2009-12-27
  • 打赏
  • 举报
回复
只有a的话,a是个地址,还不能变

但是地址里的内容可以变,算变量吧
aizibion 2009-12-27
  • 打赏
  • 举报
回复
变量
codesnail 2009-12-27
  • 打赏
  • 举报
回复
数组首元素的地址,你不能说“我是主席还是超人?”
你只是你自己
北辰猫咪 2009-12-27
  • 打赏
  • 举报
回复
两种情况:
1,int a[20]; 这么定义的话,虽然数组名a代表地址,但是a不可改变。可以当做const 类型的变量

2,如果这么定义: int * a = new int[20];   算变量
2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 slowgrace 的回复:]
数组标识符和普通标识符体现了两种不同的抽象方式。数组标识符是对一个集合的抽象;而普通标识符是对一个个体的抽象。这种本质的不同导致数组名显得与众不同。
[/Quote]
或许是受 C++ 影响,我一直觉得各种类型逻辑上应该是平等的,其标识符也应该是平等的,尽管运算规则可以不平等~
呃……该打住了……不然两个月以前让大家印象深刻的大争论又要重演了……
beefliu 2009-12-27
  • 打赏
  • 举报
回复
地址
slowgrace 2009-12-27
  • 打赏
  • 举报
回复
数组标识符和普通标识符体现了两种不同的抽象方式。数组标识符是对一个集合的抽象;而普通标识符是对一个个体的抽象。这种本质的不同导致数组名显得与众不同。
2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 slowgrace 的回复:]
引用 15 楼 hpsmouse 的回复:
每次看到“数组名”这个词难免心中发毛……
数组名只是个名字,数组才是个变量……


数组这个变量用啥代表?
[/Quote]
呵呵,淡定~~
话说回来,数组是难得一见的我们经常对其名字耿耿于怀的数据类型,不觉得很有意思么?
slowgrace 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 hpsmouse 的回复:]
每次看到“数组名”这个词难免心中发毛……
数组名只是个名字,数组才是个变量……
[/Quote]

数组这个变量用啥代表?
dskit 2009-12-27
  • 打赏
  • 举报
回复
变量。
2009-12-27
  • 打赏
  • 举报
回复
每次看到“数组名”这个词难免心中发毛……
数组名只是个名字,数组才是个变量……
chenzhuolin1002 2009-12-27
  • 打赏
  • 举报
回复
const
slowgrace 2009-12-27
  • 打赏
  • 举报
回复
简而言之,数组名不是指针右值的时候是不可修改的左值
sicxun 2009-12-27
  • 打赏
  • 举报
回复
是常量
数组名只是一个符号名称
是不具有实体的
xieyc32 2009-12-27
  • 打赏
  • 举报
回复
学习了。。。
slowgrace 2009-12-27
  • 打赏
  • 举报
回复
a是变量,其类型是int[10],也就是,a就是传说中著名的“数组标识符”。

(1)当数组标识符被用作sizeof和取址(&)操作的操作数以及用于声明数组变量时,数组标识符代表整个数组,它的类型是TYPE [n]。这个时候你可以确定地说它是个变量。
(2)当数组组标识符出现在表达式中,这个标识符的类型就从“某种类型TYPE的数组”转换成一个指针右值。该指针的类型是TYPE*,该指针指向的类型是TYPE,也就是数组元素的类型,该指针指向的内存区就是数组第0号单元。这个时候它不是变量。
Randyqiu 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 supermegaboy 的回复:]
引用楼主 underuwing 的回复:
int a[10],a算变量还是常量?


变量的定义是一段命名的内存空间。但数组名是不能统一地说它是不是变量的,因为数组名有些情况下代表数组对象本身,这时候它是一个变量,例如数组对象的定义、sizeof的操作数、&运算符的操作数,这些情况下数组名是一个变量;但除上述情况外,表达式中的数组名都不是变量,因为此时数组名被转换为一个符号地址,不代表任何地址空间,并不是对象,因此不是变量。
[/Quote]
还是这位老大说的全面,向他学习。。
加载更多回复(4)

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧