请选择 进入手机版 | 继续访问电脑版
贠老师培训群:150322713    贠老师QQ:767708506

贠老师office培训-excel学习网

 找回密码
 立即注册
点击咨询贠老师
查看: 213|回复: 8

[C语言] 可以把另外一个地址赋给一个数组名吗?

[复制链接]

3172

主题

3269

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22685
发表于 2015-12-28 10:14:52 | 显示全部楼层 |阅读模式
不可以,尽管在一个很常见的特例中好象可以这样做。

数组名不能被放在赋值运算符的左边(它不是一个左值,更不是一个可修改的左值)。一个数组是一个对象,而它的数组名就是指向这个对象的第一个元素的指针。   

如果一个数组是用extern或static说明-的,则它的数组名是在连接时可知的一个常量,你不能修改这样一个数组名的值,就象你不能修改7的值一样。

给数组名赋值是毫无根据的。一个指针的含义是“这里有一个元素,它的前后可能还有其它元素”,一个数组名的含义是“这里是一个数组中的第一个元素,它的前面没有数组元素,并且只有通过数组下标才能引用它后面的数组元素”。因此,如果需要使用指针,就应该使用指针。

有一个很常见的特例,在这个特例中,好象可以修改一个数组名的值:
    void f(chara[12])
    {
        ++a;  /*legal!*/
    }

秘密在于函数的数组参数并不是真正的数组,而是实实在在的指针,因此,上例和下例是等价的:
    void f(char *a)
    {
        ++a;  /*certainlylegal*/
    }

如果你希望上述函数中的数组名不能被修改,你可以将上述函数写成下面这样,但为此你必须使用指针句法:
    void{(char *const a)
    {
        ++a;  /*illegal*/
    }
在上例中,参数a是一个左值,但它前面的const关键字说明了它是不能被修改的。
回复

使用道具 举报

0

主题

942

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 2016-1-2 14:29:36 | 显示全部楼层
楼主是好人哪,感谢分享,太棒了!
回复 支持 反对

使用道具 举报

2

主题

916

帖子

87

积分

注册会员

Rank: 2

积分
87
发表于 2016-1-7 10:55:48 | 显示全部楼层
希望楼主能够收集更多的资料,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

842

帖子

6

积分

注册会员

Rank: 2

积分
6
发表于 2016-2-3 21:54:39 | 显示全部楼层
请问大家有什么看法?我绝对喜欢这个帖子
回复 支持 反对

使用道具 举报

0

主题

942

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 2016-2-8 11:14:56 | 显示全部楼层
我是路过的,轻轻飘过
回复 支持 反对

使用道具 举报

0

主题

855

帖子

6

积分

注册会员

Rank: 2

积分
6
发表于 2016-2-13 16:12:33 | 显示全部楼层
顶顶
回复 支持 反对

使用道具 举报

1

主题

1021

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2016-2-18 10:59:03 | 显示全部楼层
楼主不错
回复 支持 反对

使用道具 举报

1

主题

1041

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2018-10-19 14:39:07 | 显示全部楼层
学习贵在坚持哦
回复 支持 反对

使用道具 举报

0

主题

700

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 4 天前 | 显示全部楼层
有些不是太明白,研究研究再说
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



陕ICP备15003731号  

贠老师培训 GMT+8, 2018-11-18 18:46 , Processed in 0.242549 second(s), 27 queries .

快速回复 返回顶部 返回列表