C代码的内存布局

// 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));

}


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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值