首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

char* p = "abc" 声明的是字符串常量?解决方案

2012-05-28 
char* p abc 声明的是字符串常量?char* p abc 声明的是字符串常量?我试过不能修改p的内容,那么a

char* p = "abc"; 声明的是字符串常量?
char* p = "abc"; 声明的是字符串常量?
我试过不能修改p的内容,那么abc是放在哪个储存区域呢?


[解决办法]
可以修改p所指向的对象,但是当p所指向的对象是常量时,即"abc"时,由于"abc"是一个字符型数组,即在初始化时,p指向的是字符数组"abc"的首地址,由于"abc"是常量,因此不能修改"abc"的值。
[解决办法]
放在字符常量区,字符常量区的应该不能被修改。
[解决办法]
http://blog.csdn.net/mougaidong/article/details/6372765
[解决办法]
对于字符串,应该放在代码区的,字符串和int类型之类是不同的

如果是常量类型为int类型的,如const int i = 0;

则会给变量i在栈中分配空间,由于变量i为常量,所以编译器会在语法上判断,如果程序上出现修改i内容的时候,一般编译时就会报错。字符串就不同了,由于其内容会存放在代码区,所以编译器不会检查是否有地方修改它,你修改他,程序运行时会出错,所以编译器不会报错。

以上可以通过一个实验来说明,在函数中定义如下变量

int a = 0;
int *d = &a;
const int c = 0; 
const int *d = &c;
char *e = "abc";
char f = 'a';

可以在vc中查看如上变量的地址,一般会发现 变量 a,c,f的地址基本上连续,差距不会太大,
一般他们的空间在栈中,而指针e指向的地址却会和以上变量地址差距很大,显然不在栈中,
可以同类方法判断指针e指向的地址不在堆和静态数据区。

热点排行