Sivan's blog

用代码说话……
posts - 14, comments - 2, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

指针与字符常量

Posted on 2010-09-24 16:15 Sivan 阅读(321) 评论(0)  编辑 收藏 引用 所属分类: C/C++
先看一个代码
 1#include "stdafx.h"
 2#include <iostream>
 3using namespace std;
 4
 5int main()
 6{
 7    char* pch = "aaa";
 8    pch[2= 'b';
 9    cout<<pch<<endl;
10    return 0;
11}
运行这几行代码,程序会崩溃。将指针pch指向“aaa”,而“aaa”是个字符串常量,后对pch[2]进行修改,赋值操作不合法,程序崩溃。
c++中内存分为5个区域:堆、栈、自由存储区、全局/静态存储区和常量存储区。
堆、栈不说啦,自由存储区与堆类似,不过使用malloc分配free释放,全局/静态存储区存储全局变量和static变量,常量存储区存放的是常量,不允许修改,“aaa”就存储在这个位置。
将代码改为如下情况:
char str[] = "aaa";
char* pch = str;
pch[
2= 'b';
cout
<<pch<<endl;
此时“aaa”为栈分配,是数组中的存储内容,所以可以修改。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理