返回信息流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,这是为什么
这是一条镜像帖。来源:北邮人论坛 / cpp / #82066同步于 2014/9/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
指针疑惑
lixiaoyao
2014/9/2镜像同步26 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
不是指针的问题,而是string的问题,因为“hello“是常量,分配在开辟的string常量区,a、b指向同一处内存
怎么感觉每年都有这问题= =
【 在 shan10211865 的大作中提到: 】
: 不是指针的问题,而是string的问题,因为“hello“是常量,分配在开辟的string常量区,a、b指向同一处内存
: 怎么感觉每年都有这问题= =
我知道 *a==*b,&a!=&b ,a和b明显不是一个指针,但是 判定的时候a==b了 这个有些不理解
【 在 nuanyangyang 的大作中提到: 】
: 不要用==判断字符串相等。请用strcmp
我知道 *a==*b,&a!=&b ,a和b明显不是一个指针,但是 判定的时候a==b了 这个有些不理解
我可能没表达清楚,我不是想比较字符串,就是比较了下指针,看看是否相等。
【 在 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 的大作中提到: 】
: 两个不懂的指针指向了相同一块内存,这个能理解吗
也就是说 (a=b)只需要a和b只想同一块地址就行了,ok
看一下csting的内存分配原则大概就懂了
【 在 lixiaoyao 的大作中提到: 】
: 我知道 *a==*b,&a!=&b ,a和b明显不是一个指针,但是 判定的时候a==b了 这个有些不理解
【 在 nuanyangyang 的大作中提到: 】
:
: 等或不等都行。
: http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
: ...................
好详细 好的