C++|实例说明变量类型(存储与作用域)及所在内存区块

C++|实例说明变量类型(存储与作用域)及所在内存区块如题,直接看代码和注释:#include <stdio.h>#include <stdlib.

欢迎大家来到IT世界,在知识的湖畔探索吧!

如题,直接看代码和注释:

#include <stdio.h>
#include <stdlib.h>
void fnc(int a)	// 2 fnc指向代码区
{int b;} // int a,int b都是局部变量
const int c_g_v = 11; // 全局常量
int g_bss;		// 4 bss区(未初始化)
int g_var = 0;	// 5 data区(有初始化)

int main() //main函数除了其是程序的开始点以外,其中变量的作用域与普通函数无异
{
	int k = 0;			// 1 stack栈区
	char* cp = "abc";	// 3 常字符量区
	static s_var = 0;	// 5 data区(有初始化)
	int* p = (int*)malloc(sizeof(int));// 6 p指向的是动态内存的堆区(p本身保存在栈上)
	
	printf("\n%-8s %-8s %-8s %-8s %-8s %-8s\n","栈","代码区","常量区","bss区","data区","堆");
	
	printf("%-8x %-8x ",&k,fnc);
	// printf("%x ",cp);
	printf("%-8x ",static_cast<const void *>(cp));
	printf("%-8x %-8x %-8x\n",&g_bss,&g_var,p);
	//0012FF44 0040126C 00471078 0047EDFC 0047EE00 017F2C90

	printf("%12d ",(int)fnc-(int)&k);
	printf("%8d ",(int)static_cast<const void *>(cp)-(int)fnc);
	printf("%8d ",(int)&g_bss-(int)static_cast<const void *>(cp));
	printf("%5d ",(int)&g_var-(int)&g_bss);
	printf("%10d\n",(int)p-(int)&g_var);

	const int c_v = 11; // 局部常量
	printf("%s%x\n","局部常量:",&c_v);
	printf("%s%x\n","全局常量:",&c_g_v);
	
	
	printf("%s%d\n","栈起始地址:",(int)&k);
	printf("%s\n","(栈中数据增长时,地址递减,栈中字节数量不能超过此数,否则栈溢出)");
	//char arr[1034496]; //cpp ok
	 char arr[1014496]; //c ok
	printf("%s%d\n","允许的字节数:",sizeof(arr));
	printf("%s\n","这一块栈内存使用两个寄存器(sb,sp)跟踪。");
	for(int i=0;i<11;++i);
	system("pause");
	return 0;
}

欢迎大家来到IT世界,在知识的湖畔探索吧!

C++|实例说明变量类型(存储与作用域)及所在内存区块

-End-

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/31431.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信