免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5926 | 回复: 11
打印 上一主题 下一主题

[C++] c/c++空指针 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-03 16:23 |只看该作者 |倒序浏览
char * null_ptr = static_cast<char *>(0);
null_ptr = "Hello World\n";
cout << null_ptr;

以上代码是可以执行的。对于一个空指针进行赋值,在g++的编译环境下能够正常运行,这个是如何处理的。存储“Hello World\n"的空间是从哪儿分配的?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2011-08-03 16:33 |只看该作者
对一个指针赋值当然是可以的.

char * null_ptr = NULL;
null_ptr = "Hello World\n";

论坛徽章:
0
3 [报告]
发表于 2011-08-03 16:36 |只看该作者
问题是空指针赋值,那么空间是从哪儿开辟的?
回复 2# hellioncu

论坛徽章:
0
4 [报告]
发表于 2011-08-03 16:54 |只看该作者
编译器 为字符串开辟了新的存储空间,null_ptr = "Hello World\n"; 指针指向了字符串的首地址

论坛徽章:
0
5 [报告]
发表于 2011-08-03 17:25 |只看该作者
这个问题还是先说c吧,别说c++

null_ptr这个指针本身是站内存的
null_ptr指向的地方只0地址,那里的内存是没有被映射的

char *null_ptr = 0;
*null_ptr = 'a'; //出错
null_ptr = "a"; //正确

论坛徽章:
0
6 [报告]
发表于 2011-08-03 17:31 |只看该作者
这是内存程序内存分布里的问题吧。好像大部分c书的内存部分会介绍

论坛徽章:
0
7 [报告]
发表于 2011-08-03 19:15 |只看该作者
这么回事啊。
回复 5# deadlylight

论坛徽章:
0
8 [报告]
发表于 2011-08-03 21:30 |只看该作者
回复 1# gulang2004xy


    这个问题不是大问题啊,“hello,world”在代码段,这里根本就没有对它分配内存,只不过指针指向了这个字符串所在的首地址

论坛徽章:
0
9 [报告]
发表于 2011-08-04 11:12 |只看该作者
明白 了

论坛徽章:
0
10 [报告]
发表于 2011-08-04 17:41 |只看该作者
“Hello world!”是在常量区,指针指向常量区。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP