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

堆和栈的一些有关问题

2012-03-20 
堆和栈的一些问题这是一个前辈写的,非常详细//main.cppinta0全局初始化区char*p1全局未初始化区main(){

堆和栈的一些问题
这是一个前辈写的,非常详细  
//main.cpp  
int   a   =   0;   全局初始化区  
char   *p1;   全局未初始化区  
main()  
{  
int   b;   栈  
char   s[]   =   "abc ";   栈  
char   *p2;   栈  
char   *p3   =   "123456 ";   123456在常量区,p3在栈上。  
static   int   c   =0;   全局(静态)初始化区  
p1   =   (char   *)malloc(10);  
p2   =   (char   *)malloc(20);  
分配得来得10和20字节的区域就在堆区。  
strcpy(p1,   "123456 ");   123456放在常量区,编译器可能会将它与p3所指向的 "123456 "优化成一个地方。  
}  

strcpy(p1,   "123456 ");   123456放在常量区
为什么会放在常量区而不放在p1所指的堆上呢?


int   a   =   35;
char   str[10]   =   "0123456789 ";
这种方式int   a的值是35

int   a   =   35;
char   str[10];
strcpy(str, "0123456789 ");
这样a就不等于35了
这是为什么呢?

[解决办法]
strcpy(p1, "123456 "); 123456放在常量区
为什么会放在常量区而不放在p1所指的堆上呢?
-------------------------------------
p1是一个指针,他指向的是一个常量(123456),而常量是放在常量区的。就是这个原因。
如果在上面那句之后有这句
p1 = (char*)malloc(sizeof(char));
那么p1就指向堆了。


int a = 35;
char str[10] = "0123456789 ";
这种方式int a的值是35

int a = 35;
char str[10];
strcpy(str, "0123456789 ");
这样a就不等于35了
这是为什么呢?
---------------------------------
这是谁说的???

热点排行