谈谈字符串常量
来源:互联网 发布:淘宝闲鱼 编辑:程序博客网 时间:2024/05/29 19:06
昨天上C++选修,老师指出了一个我以前没怎么注意的问题,形如
"char * pStr="Abcd";"的语句中的pStr指向的是字符串常量,所以程序中对pStr指向的区
域只能读,
不能写,否则即算编译成功,也会运行失败。
刚刚结合网上资料,对这个情况实验了一下,有如下结论,和大家共享下.
1.pStr指向的"Abcd"是字符串常量,编译后存放在内存中的数据区(即存放全局变量和静态局
部变量的地
方)
2."Abcd"的存放位置和静态局部变量一致,其生存期也和静态局部变量一样具有程序生存期
(事实上生存
期和存放区域是对应的)。不过与静态全局变量不同的是,它是只读的。
3."Abcd"这个字符串应与"const char pStr2[]="Abcd"与以区分,后者有可能是存放在栈区
(auto变量
就放在这里),当然有些编译器对const作了优化,也有放其他地方的.
由上述结论应该可以很快推出下面测试程序的结果
#include<iostream>
using namespace std;
char * test();
int main()
{
char * p=test();
cout<<p<<endl<<hex<<(unsigned int)p<<endl;
return 0;
}
char * test()
{
char * str1="I Want To Get The Answer.";
char * str2="I Want To Get The Answer.";
char * str3="I Want To Get The Answer.";
char str4[]="I Want To Get The Answer.";
char str5[]="I Want To Get The Answer.";
cout<<hex<<(unsigned int)str1<<','<<hex<<(unsigned int)str2<<','/
<<hex<<(unsigned int )str3<<','<<hex<<(unsigned int)str4<<','/
<<hex<<(unsigned int )str5<<endl;
return str1;
}
输出是(vc6.0)
46f02c,46f02c,46f02c,12fefc,12fee0
I Want To Get The Answer.
46fc02c
可以看到
1.str1,str2,str3这三个地址指针的值一样,而后面两个指针地址值相异。为什么这样?从
前文中可找
到答案。
2.cout<<p能通过编译,是因为“p=test()”;接收到的是一个具有程序生存期的内存空间指
针。
- 谈谈字符串常量
- 常量,字符串常量
- 字符串常量
- 字符串常量
- 字符串常量
- 字符串常量
- 字符串常量
- 字符串常量
- 字符串常量
- 字符串常量
- 字符串常量
- 字符串常量
- 字符串常量
- 字符串常量
- 字符串常量
- 字符串常量
- 常量字符串
- 字符串常量
- Sales Channels of Hong Kong Clothing Industry
- Gmail间歇性不能访问?
- win2000/2003超级技巧
- amfPhp
- mapping--映射文件--详解
- 谈谈字符串常量
- Sleeping with the Enemy
- 通过Google AdSense赚钱最多的8个网站
- 使用 .NET Framework 2.0 在您的应用程序中支持证书
- OSGI典型的应用案例
- 有关windows系统安全的CMD命令大全!
- 有关吴三桂将军最可笑的一篇文章,值得一看
- chr码值对应列表大全(收藏)
- 在jsp环境中配置使用fckeditor