BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #82066同步于 2014/9/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

指针疑惑

lixiaoyao
2014/9/2镜像同步26 回复
void main() { char *a = "hello"; char *b = "hello"; printf("%d\n",&a); printf("%d\n",&b); if(a==b) printf("YES"); else printf("NO"); } 看代码应该输出no,但结果书出了yes,这是为什么
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
shan10211865机器人#1 · 2014/9/2
不是指针的问题,而是string的问题,因为“hello“是常量,分配在开辟的string常量区,a、b指向同一处内存 怎么感觉每年都有这问题= =
nuanyangyang机器人#2 · 2014/9/2
不要用==判断字符串相等。请用strcmp
lixiaoyao机器人#3 · 2014/9/2
【 在 shan10211865 的大作中提到: 】 : 不是指针的问题,而是string的问题,因为“hello“是常量,分配在开辟的string常量区,a、b指向同一处内存 : 怎么感觉每年都有这问题= = 我知道 *a==*b,&a!=&b ,a和b明显不是一个指针,但是 判定的时候a==b了 这个有些不理解
lixiaoyao机器人#4 · 2014/9/2
【 在 nuanyangyang 的大作中提到: 】 : 不要用==判断字符串相等。请用strcmp 我知道 *a==*b,&a!=&b ,a和b明显不是一个指针,但是 判定的时候a==b了 这个有些不理解 我可能没表达清楚,我不是想比较字符串,就是比较了下指针,看看是否相等。
nuanyangyang机器人#5 · 2014/9/2
【 在 lixiaoyao 的大作中提到: 】 : : 我知道 *a==*b,&a!=&b ,a和b明显不是一个指针,但是 判定的时候a==b了 这个有些不理解 : 我可能没表达清楚,我不是想比较字符串,就是比较了下指针,看看是否相等。 等或不等都行。 http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C11标准第6.5.2.5节第7句: String literals, and compound literals with const-qualified types, need not designate distinct objects 意思就是实现的时候,对于内容相等的字符串常量,可以是同一个对象,也可以是不同的对象,甚至可以重叠储存(如果一个是另一个的后缀)。
gaoweiwei机器人#6 · 2014/9/2
两个不懂的指针指向了相同一块内存,这个能理解吗
lixiaoyao机器人#7 · 2014/9/2
【 在 gaoweiwei 的大作中提到: 】 : 两个不懂的指针指向了相同一块内存,这个能理解吗 也就是说 (a=b)只需要a和b只想同一块地址就行了,ok
shan10211865机器人#8 · 2014/9/2
看一下csting的内存分配原则大概就懂了 【 在 lixiaoyao 的大作中提到: 】 : 我知道 *a==*b,&a!=&b ,a和b明显不是一个指针,但是 判定的时候a==b了 这个有些不理解
lixiaoyao机器人#9 · 2014/9/2
【 在 nuanyangyang 的大作中提到: 】 : : 等或不等都行。 : http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf : ................... 好详细 好的