字符串指针疑问

xiaolomg 2014-01-15 12:20:45
大家看下面代码
#include <iostream>
int main(){
char* p1 = "ab";
char* p2 = "ab";

}

为什么p1,p2指向为什么是相同的?怎么解释呢?
...全文
193 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
SKATE11 2014-01-16
  • 打赏
  • 举报
回复
在VC上面是相同的地址 常量区
ForestDB 2014-01-16
  • 打赏
  • 举报
回复
"ab"存在于某个区域 p1和p2都指向这个区域
赵4老师 2014-01-16
  • 打赏
  • 举报
回复
.rdata是常量区,不是分配在堆空间。
u010873668 2014-01-16
  • 打赏
  • 举报
回复
字符串“ab”分配在堆空间,可以理解为全局变量,指针相同是因为编译器优化的结果
耶鲁於 2014-01-16
  • 打赏
  • 举报
回复
编译器的优化处理,如今多数编译器皆如此
dcw0402 2014-01-16
  • 打赏
  • 举报
回复
就是一个指针,严格来说应该写成const char* p1 = "xxxx" 两个指针相同就说明指向同一个地址空间呗,有啥不理解的呢? 这是一个编译器的行为,去纠结这个事情没有意义
lin5161678 2014-01-16
  • 打赏
  • 举报
回复
可以相同 可以不同 为什么你觉得不能相同
漫步者、 2014-01-15
  • 打赏
  • 举报
回复
因为字符串“abc”是一个放在一个常量地址处。指向该字符串,就是指向该常量地址。
赵4老师 2014-01-15
  • 打赏
  • 举报
回复
搜“常量折叠”
zhuobattle 2014-01-15
  • 打赏
  • 举报
回复
你把"ab"看成是一个全局变量(静态字符串)即可理解。
图灵狗 2014-01-15
  • 打赏
  • 举报
回复
相同的字符串常量只会有一个副本,所以p1和p2都指向了相同的地方,你可以改用下面的试试: char p1[] = "ab"; char p2[] = "ab";
引用 楼主 boyhailong 的回复:
大家看下面代码
#include <iostream>
int main(){
	char* p1 = "ab";
	char* p2 = "ab";
	
} 
为什么p1,p2指向为什么是相同的?怎么解释呢?
寒沙胜雪 2014-01-15
  • 打赏
  • 举报
回复
具体不了解编译器怎么处理,我想为了效率应该如上所说。
熊熊大叔 2014-01-15
  • 打赏
  • 举报
回复
"ab"会保存在常量区, 一般的编译器都会优化, 相同的常量只保存一份.
FancyMouse 2014-01-15
  • 打赏
  • 举报
回复
编译器有优化,相同常量字符串用只存一次。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧