标题:请教一个关于字符串的小问题
只看楼主
大大猫
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2011-8-19
结帖率:81.25%
已结贴  问题点数:10 回复次数:9 
请教一个关于字符串的小问题
为什么用数组形式定义成字符串,char a[]="hello";a的指向不能改变 不能a="world";数组名不是相当于数组的首地址吗,为什么这个地址不能改变呢,谢谢
搜索更多相关主题的帖子: 字符串 hello world 
2011-10-10 16:49
statics
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:163
专家分:625
注 册:2011-8-29
得分:2 
他已经指向常量了

惟我独行...
2011-10-10 17:00
statics
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:163
专家分:625
注 册:2011-8-29
得分:0 
常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多)

惟我独行...
2011-10-10 17:02
大大猫
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2011-8-19
得分:0 
回复 2楼 statics
字符串是常量吗,那为什么可以修改单个数组元素的值呢,详细说下呗
2011-10-10 17:03
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
得分:2 
回复 楼主 大大猫
数组名相当于指针常量(const), 字符串可以赋值给数组,但不能给数组名,数组名毕竟不是指针,指针是啥,存放第一的变量,有空间,数组名没有!╯_╰还有哪个混蛋说数组名是指针,虽有时,会退化,但毕竟不是指针,这不是捣蛋吗?

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-10-10 17:06
大大猫
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2011-8-19
得分:0 
回复 5楼 A13433758072
还是不明白,数组名相当于指针常量(const),是相当于const char*a;还是相当于char *const a呢
2011-10-10 17:13
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:2 
回复 6楼 大大猫
数组名和指针之间有一个不同之处,指针是变量,数组名不是变量,当数组名传递给一个函数时,实际上传递的该数组第一个元素的地址

总有那身价贱的人给作业贴回复完整的代码
2011-10-10 17:54
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
得分:2 
回复 楼主 大大猫
要弄清楚这个问题,你首先需要清楚变量空间和变量名,最好是看看C的编译器。
就拿局部变量举例:
如:int a = 0;
空间在堆栈区,a这个字符串在代码区作为一个符号存在,此符号映射地址在堆栈区。

而int *a = 0, *b = 0;
在堆栈区申请一块空间,此空间用来存放符号a指向的地址,而“a”本身还是在代码区作为一个符号存在,此符号映射在堆栈区特定空间。
当操作a = b时,由于C语言对指针作了编译,在此,可以将b指向的地址值放入a在堆栈区的空间。

char a[]="hello";
或者char a[5] = {0};
“a”仅仅作为代码区的一个符号存在,直接映射到堆栈区(或者常量区)的数组地址上。在C语言编译器中,对除了指针以为的其他变量,都是直接映射到最终空间,不允许对其地址赋值,否则,会造成变量空间泄漏。

这个问题要结合编译器看,另外,数组和指针根本是两个不同的范畴。
在使用过程中,指针可以指向所有的地址,而不仅仅是数组的地址。

有不清楚的地方,讨论。

[ 本帖最后由 silent_world 于 2011-10-10 18:24 编辑 ]
2011-10-10 18:06
quanshaohui
Rank: 1
来 自:江西抚州
等 级:新手上路
帖 子:8
专家分:3
注 册:2011-10-9
得分:0 
哈哈哈,不太懂
2011-10-10 18:54
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
得分:2 
你只要牢记 数据名是常量就行
常量当然不能修改
2011-10-11 00:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-351998-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.302992 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved