// code_area.cpp :
//
#include "stdafx.h"
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int a = 0; //全局初始化区
char* p1; //全局未初始化区
void main()
{
int b;
char s[] = "abc"; //s栈,"abc"静态存储区||拷贝副本到栈区||数组变量,分配的区域管够
s[0] = 'k'; //可以,修改的是栈区元素,不会违规
char* p2;
char* p3 = "123456"; <span style="white-space:pre"> </span>//p3是栈,||“123456” 常量区字符串
//p3[0] = 'k'; <span style="white-space:pre"> </span>//错误的做法,直接修改常量区的字符,违法;
static int c = 0; //全局静态存储区
p1 = (char*)malloc(10);
p2 = (char*)malloc(10); <span style="white-space:pre"> </span>//在堆区会分配出空间
strcpy(p1, "123456"); <span style="white-space:pre"> </span>//编译器优化会把p1和p3指向同样的地方
printf("p1:%c %d \n", s[0],strlen(p3));
}
- 字符串常量区
- 编译器优化 相同的字符串常量同样的指针
- 数组空间分配
栈
,只是从静态存储区拷贝一份到栈上,所以都是可以修改的