首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

K&R C -字符串恒量

2013-01-02 
K&R C --字符串常量这里有两个定义: char amessage[]now is the time /*定义一个数组*/char *pmessage

K&R C --字符串常量
K&R C -字符串恒量这里有两个定义:
 

char amessage[]="now is the time"; /*定义一个数组*/
char *pmessage="now is the time"; /*定义一个指针*/

数组中的单个字符可以进行修改,但amessage始终指向同一个存储位置。
另pmessage是一个指针,其初值指向一个字符串常量,之后它可以被修改以指向其他位置,
但如果试图修改字符串的内容,结果是没有定义的。(参见图5-7)。

 怎么深刻理解这段话。谢谢。
[解决办法]
引用:
这里有两个定义:
 C/C++ code?12char amessage[]="now is the time"; /*定义一个数组*/char *pmessage="now is the time"; /*定义一个指针*/
数组中的单个字符可以进行修改,但amessage始终指向同一个存储位置。
另pmessage是一个指针,其初值指向一个字符串常量,之后它可以被……

1.amessage是数组名,类型为指向char类型的常量指针,它的值是一个指针常量,也就是说它的值
是不可以被改变的。也就是K&R里面所说的amessage始终指向同一个存储位置。
2.pmessage是一个指向char类型的指针,它的值为字符串常量"now is the time"的首地址。既然是字符串常量,如果你想修改一个常量的值,你说结果是什么呢?


[解决办法]
1.数组名是常量指针,常量代表不可修改。数组形成的时候,地址就固定了。但作为一个容器,数组存储的内容当然是可以改变的。
2.对于指针来说,指针变量存储的是一个地址,这个地址保存的是指针所指向的值,所以可以通过修改指针保存的地址,使得指针指向别的地方。[size=16px]
[解决办法]

char amessage[]="now is the time"; /*定义一个数组*/
//系统给它分配的一段内存空间,在栈中,可以被修改
char *pmessage="now is the time"; /*定义一个指针*/ 
//这个是指向了一个常量地址,里面的数据是禁止被修改的。


[解决办法]
1.amessage指向存储位置不变,栈中字符串可以修改。
2.amessage指向位置可以改变,字符串常量不可修改。

热点排行