字符串的地址问题

字符串的地址问题

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

例如:

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"的地址

}

扫描二维码关注公众号,回复: 9894961 查看本文章

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 篇原创文章 · 获赞 1 · 访问量 51

猜你喜欢

转载自blog.csdn.net/qq_39752645/article/details/104373032