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

关于char *ch = "hello world!"的有关问题

2012-09-18 
关于char *ch hello world!的问题char ch[] hello world!//这个字符串hello world是存放在栈吗?

关于char *ch = "hello world!";的问题
char ch[] = "hello world!";//这个字符串hello world是存放在栈吗??
char *cp = "hello world!";//这个字符串hello world是存放在文字常量区吗??
为什么上面两种还不同??数组与指针不都是地址吗??请大虾说一说

程序员正常情况下,只能修改栈区的数据和堆区的数据,其他区是无法修改的,对吧?
那为什么我写的程序如下能通过
/* 编译器VS2010 */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *ch = "hello world!"; //"hello world!"在文字常量区

*(ch + 1) = 'a';
printf("%s",ch);

system("PAUSE");
return 0;

}

//还有大虾们怎样用编译器如VS2010查看某一数据在哪个区(例如文字常量区)
//望大虾们不吝赐教

[解决办法]
.c
MSVC2010 编译通过,运行通过
gcc 编译通过,运行出错
.cpp
MSVC2010 编译通过,运行出错
gcc 编译通过(警告),运行出错
[解决办法]
编译通过只等于翻译成了二进制码,运行的时候装入内存,发现这个内存不能修改,所以出错。
编译通过也不是debug通过,debug是调式,单步到那里必须报错,我不信你能在VS2010debug通过。如果那样,引用10楼的话,“如果能修改的话,我会觉得很没自信了”,机制也太不安全了吧。

C/C++ code
    char *ch= NULL;strcpy(ch, "abcde");
[解决办法]
我给你回答的还不满意?那个什么栈 堆 常量区的都是在内存中,你先不要管它在哪,你知道它的地址后你不就知道它在那了?反正都是在内存中,你调试的时候看下ch的值,也就是字符串常量的地址,在把那个地址复制到内存查看窗口中,你不就能看到常量区在哪了????
探讨

其实我一直都很想问一下,那些常量区是在哪里的??还有栈区的数据和堆区的数据也是在哪里的??是不是都是在内存里面的吗??
然后在运行的时候,它们就在内存里面把它们分成几个区域:栈区和堆区还有常量区的??
很疑惑~~求解。。。

热点排行