关于指针地址的问题(newbie)

yuanlai123 2010-06-07 03:49:06
	char ctr[]="hello";
char ctr2[]="hello";
char *cp=ctr;
char *cp2=ctr2;

char *cpp="hello";
char *cpp2="hello";

为什么cp与cp2指向的地址不同,而cpp与cpp2所指向的地址相同,请大家解释一下,谢谢。
...全文
114 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
rwjlqn 2010-06-07
  • 打赏
  • 举报
回复
1楼二楼正解啊
yuanlai123 2010-06-07
  • 打赏
  • 举报
回复
谢谢大家
ForestDB 2010-06-07
  • 打赏
  • 举报
回复
char ctr[]="hello"; // ctr是局部变量(数组),初始化成"hello"
char ctr2[]="hello"; // 同上,故而两个是不同的变量,起始地址不一样的
char *cp=ctr; // cp指向ctr的起始地址
char *cp2=ctr2; // cp2指ctr2的起始地址,故而这两个指针地址是不一样的

char *cpp="hello"; // cpp直接指向内存中“某个地址”,该地址存有"hello"
char *cpp2="hello"; // 同上,这“某个地址”就是系统开辟的“常量区”,一般做了优化,不必对相同的"hello"开两个区域,故而cpp和cpp2指向同一个区域(地址)
pengzhixi 2010-06-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 yuanlai123 的回复:]
C/C++ code
char ctr[]="hello";//存放在栈上
char ctr2[]="hello";//存放在栈上
char *cp=ctr;
char *cp2=ctr2;

char *cpp="hello";//常量字符串存放在常量区
char *cpp2="hello";//常量字符串存放在常量区
为什么cp与cp2指向的地址不同,而cpp与cpp2所指向的地址相同,请大家解释一下,谢……
[/Quote]
为什么cpp和cpp2的地址相同是因为优化的结果,两个相同的常量字符串被优化成一个了。所以他们指向的是一个字符串常量
yunyun1886358 2010-06-07
  • 打赏
  • 举报
回复
为了节省资源,编译器优化,所有的相同的字符串常量只保存一份,所以cpp与cpp2所指向的地址相同;
cp与cp2指向的是变量所以不同。
太乙 2010-06-07
  • 打赏
  • 举报
回复
char ctr[]="hello";
char ctr2[]="hello";
char *cp=ctr;
char *cp2=ctr2;
=========以上在栈空间
char *cpp="hello";
char *cpp2="hello";
=========以上在全局常量数据区间
benbshmily 2010-06-07
  • 打赏
  • 举报
回复
SF为什么这么快。啊啊啊啊
alicktony 2010-06-07
  • 打赏
  • 举报
回复
对于数组,是变量.而单独的"hello"是常量.
benbshmily 2010-06-07
  • 打赏
  • 举报
回复
因为cpp和cpp2都是指向hello字符串常量。编译器把这个字符串常量优化成同一个字符创“hello”。因此cpp和cpp2其实就是指向了同一个位置了。
而前面的ctr和ctr2是两个不同的数组。地址显然不一样。
  • 打赏
  • 举报
回复
cp保存的是ctr的地址cp2保存的是ctr2的地址,很明显ctr ctr2地址是不同的

cpp cpp2则保存的是"hello"的地址,这个"hello"保存在哪里 是编译器安排的,cpp cpp2可能一样 也可能不一样

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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