字符串的地址问题

字符串的地址问题

如果直接用引用" "里面的字符串量 其实是一开始就存在静态区的的,如果修改了内容,会造成比较严重的后果

例如:

const char* name1 = “demo”;

char name2[] = “demo”;

上面两个其实在内存中的存储方式是不同的

const char* name 1= “demo”; “demo"其实程序一开始就在静态区分配地址空间存放"demo”,这个地址是静态的,意思就是程序一开始到结束,这个值在不同的函数出现,其实还是使用的该"demo"的地址空间.

程序如下:

#include
#include <Windows.h>

using namespace std;

void test() {
const char* name = “demo”;

cout << "0X" << (void*)name << endl;			//这里的name使用的是"demo"的地址

}

int main(void) {
const char* name1 = “demo”;
char name2[] = “demo”;

cout << "0X" << (void*)name1 << endl;			//这里的name1使用的是 "demo"的地址


test();				//调用该函数

system("pause");

return 0;

}

在我的程序中结果为 : 输出结果:0X00DA9B30 0X00DA9B30 这表明"demo"就是一个静态的值 ,出现在不同函数里,使用的也是该"demo"的地址.

那么,那main函数中的 char name2[] = “demo” 这个name2的地址是什么?

首先: 在main函数里生成了 name2的内存空间 ,再通过"demo"拷贝到name2的地址中,这里相当于一个拷贝

所以,name2中的地址 跟 "demo"里的地址是不同的.

程序如下:

#include
#include <Windows.h>

using namespace std;

int main(void) {
char name2[] = “demo”;

cout << (void*)"demo" << endl;		//因为"demo"指向的是该首字符的地址,加上(void*)输出首地址
cout << (void*)name2 << endl;		//name2也指向首字符的地址,加上(void*)输出首地址


system("pause");

return 0;	

}

在我的程序中结果为 : 输出结果;00FC9B30 00CFFAE4 这表明2个地址是不同的!**

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘉人、LiangYing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值