字符串的地址问题
如果直接用引用" "里面的字符串量 其实是一开始就存在静态区的的,如果修改了内容,会造成比较严重的后果
例如:
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个地址是不同的!**