C代码的内存布局

// code_area.cpp : 
//
#include "stdafx.h"
#include 
#include 
#include 

int a = 0;					//全局初始化区
char* p1;					//全局未初始化区

void main()
{
	int b;
	char s[] = "abc";			//s栈,"abc"静态存储区||拷贝副本到栈区||数组变量,分配的区域管够
	s[0] = 'k';				//可以,修改的是栈区元素,不会违规
	char* p2;

	char* p3 = "123456";			//p3是栈,||“123456” 常量区字符串
	//p3[0] = 'k';				//错误的做法,直接修改常量区的字符,违法;

	static int c = 0;			//全局静态存储区
	p1 = (char*)malloc(10);
	p2 = (char*)malloc(10);			//在堆区会分配出空间

	strcpy(p1, "123456");			//编译器优化会把p1和p3指向同样的地方
	printf("p1:%c  %d \n", s[0],strlen(p3));

}


  • 字符串常量区
  • 编译器优化 相同的字符串常量同样的指针
  • 数组空间分配,只是从静态存储区拷贝一份到栈上,所以都是可以修改的     
   举例:字符串常量的定义:以"fhweotheow" ,



你可能感兴趣的:(C++)