堆和栈的一些问题
这是一个前辈写的,非常详细
//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了
这是为什么呢?
---------------------------------
这是谁说的???