游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10154|回复: 49

问个问题(比较弱)

[复制链接]

26

主题

324

帖子

325

积分

中级会员

Rank: 3Rank: 3

积分
325
QQ
发表于 2004-10-14 11:47:00 | 显示全部楼层 |阅读模式
在C++中,const对象的地址是不能赋给指向非cosnt对象的指针的。可是,为什么以下语句却可以实现呢? [em24]
char *pc;
pc = "haha";
cout<<pc<<endl;
字符串常量"haha"不是“返回第一个元素的内存地址,一个const char*类型”吗?那么又怎能将const的"haha"的地址赋给指向非const对象的pc呢?

26

主题

324

帖子

325

积分

中级会员

Rank: 3Rank: 3

积分
325
QQ
 楼主| 发表于 2004-10-14 13:42:00 | 显示全部楼层

Re: 问个问题(比较弱)

这是为什么呢?无限想不通中…… [em7] [em24]
大家帮帮忙啊!!

9

主题

151

帖子

153

积分

注册会员

Rank: 2

积分
153
发表于 2004-10-14 14:50:00 | 显示全部楼层

Re:问个问题(比较弱)

……

26

主题

324

帖子

325

积分

中级会员

Rank: 3Rank: 3

积分
325
QQ
 楼主| 发表于 2004-10-14 16:46:00 | 显示全部楼层

Re: Re:问个问题(比较弱)

lovecpp: Re:问个问题(比较弱)

……

就这样啊?解释一下嘛! [em10]

9

主题

50

帖子

60

积分

注册会员

Rank: 2

积分
60
QQ
发表于 2004-10-14 19:40:00 | 显示全部楼层

Re:问个问题(比较弱)

const char* 中const只是限定了它不能被修改,没说不能被读取...
谁需要即不能被写又不能被读的一块内存......

const只是限定了它不能被修改
char* 和 const char*都是 char*

0

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
发表于 2004-10-14 19:54:00 | 显示全部楼层

Re:问个问题(比较弱)

哈哈哈,楼主看看下面的那个对?
(A)
char * const s = "haha";
                  s = "hahaha";
                *s = 'h';


(B)
char * const s                 ;
                  s = "hahaha";
                *s = 'h';

(C)
const char * s = "haha";
                  s = "hahaha";
                *s = 'h';

(D)
const char * s                ;
                  s = "hahaha";
                *s = 'h';

哈哈阿,上面是关于常值指针的问题。。。。

0

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
发表于 2004-10-14 19:57:00 | 显示全部楼层

Re:问个问题(比较弱)

如果楼主有些困惑,我明天来告诉你.....

26

主题

324

帖子

325

积分

中级会员

Rank: 3Rank: 3

积分
325
QQ
 楼主| 发表于 2004-10-14 20:09:00 | 显示全部楼层

Re: Re:问个问题(比较弱)

huzht: Re:问个问题(比较弱)

哈哈哈,楼主看看下面的那个对?
(A)
char * const s = "haha";
                  s = "...

B和D一定错,因为const必须初始化。
A和C也错,A是常量指针,不能再s = "hahaha",可是*s = 'h'是对的;C是指向常量对象的指针,不能*s = 'h',可是s = "hahaha"是对的。
也即,全错!
可是偶问的问题没得到解释啊!! [em4]

26

主题

324

帖子

325

积分

中级会员

Rank: 3Rank: 3

积分
325
QQ
 楼主| 发表于 2004-10-14 20:34:00 | 显示全部楼层

Re: Re: Re:问个问题(比较弱)

weisite: Re: Re:问个问题(比较弱)


B和D一定错,因为const必须初始化。
A和C也错,A是常量指针,不能再s = "hahaha",可是*s = '...


刚刚试了一下,发现自己说错了两点:
1.D不是常量,只是指向常量的指针,所以不用初始化,郁闷~~ [em10]
2.和我想的一样,对于A,即使s不是指向常量的指针,可是s = "hahaha"之后,s所指的对象就是const的,任何试图改变它的值都将出现错误,如:*s = 'h'。只是没想到将一个常量对象"hahaha"的地址赋给一个非const指针竟能被编译器接受!只是在试图改变的时候才出现错误。我是在VC6.0下试的!

26

主题

324

帖子

325

积分

中级会员

Rank: 3Rank: 3

积分
325
QQ
 楼主| 发表于 2004-10-14 20:51:00 | 显示全部楼层

Re:问个问题(比较弱)

又试了一下,
const double cdval = 9.60;
double *ptr = &cdval;
会被认出是错误。
为什么呢??无限想不通中~~~
难道字符串“haha”不是返回cosnt char*,或者是特殊的吗?还是两者有本质区别??
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-17 12:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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