现在的位置: 首页 > 综合 > 正文

程序的内存及标识符的存储属性(二)

2013年09月09日 ⁄ 综合 ⁄ 共 1397字 ⁄ 字号 评论关闭

测试代码

#include <stdio.h>

#include <malloc.h>


int g_i = 100;

int g_j = 200;

int g_k, g_h;


int main(int argc, char * argv[])
{
	
	const int MAXN = 100;
	
	
	int *p = (int*)malloc(MAXN * sizeof(int));
	
	int *q = (int*)malloc(MAXN * sizeof(int));
	
	
	static int s_i = 5;
	
	static int s_j = 10;
	
	static int s_k;
	
	static int s_h;
	
	
	int i = 5;
	
	int j = 10;
	
	int k = 20;
	
	int f, h;
	
	
	char *pstr1 = "magictong Hello World";
	
	char *pstr2 = "magictong Hello World";
	
	char *pstr3 = "Hello World";
	
	
	int * r = (int*)malloc(MAXN * sizeof(int));
	
	
	printf("栈中数据地址i(有初值):x%08x = %d\n", &i, i);
	
	printf("栈中数据地址j(有初值):x%08x = %d\n", &j, j);
	
	printf("栈中数据地址k(有初值):x%08x = %d\n", &k, k);
	
	printf("栈中数据地址f(无初值):x%08x = %d\n", &f, f);
	
	printf("栈中数据地址h(无初值):x%08x = %d\n", &h, h);
	
	
	putchar('\n');
	
	printf("静态数据地址s_i(有初值):x%08x = %d\n", &s_i, s_i);
	
	printf("静态数据地址s_j(有初值):x%08x = %d\n", &s_j, s_j);
	
	printf("静态数据地址s_k(无初值):x%08x = %d\n", &s_k, s_k);
	
	printf("静态数据地址s_h(无初值):x%08x = %d\n", &s_h, s_h);
	
	
	putchar('\n');
	
	printf("全局数据地址g_i(有初值):x%08x = %d\n", &g_i, g_i);
	
	printf("全局数据地址g_j(有初值):x%08x = %d\n", &g_j, g_j);
	
	printf("全局数据地址g_k(无初值):x%08x = %d\n", &g_k, g_k);
	
	printf("全局数据地址g_h(无初值):x%08x = %d\n", &g_h, g_h);
	
	
	putchar('\n');  
	
	printf("字符串常量数据地址pstr1:x%08x 指向0x%08x 内容为-%s\n", &pstr1, pstr1, pstr1);
	
	printf("字符串常量数据地址pstr2:x%08x 指向0x%08x 内容为-%s\n", &pstr2, pstr2, pstr2);
	
	printf("字符串常量数据地址pstr3:x%08x 指向0x%08x 内容为-%s\n", &pstr3, pstr3, pstr3);
	
	
	putchar('\n'); 
	
	printf("堆中数据地址p:x%08x 指向 = 0x%08x\n", &p, p);
	
	printf("堆中数据地址q:x%08x 指向 = 0x%08x\n", &q, q);
	
	printf("堆中数据地址r:x%08x 指向 = 0x%08x\n", &r, r);


	free(p);

	free(q);
	
	free(r);
	
	
	return 0;
}

 

运行结果

总结分析见《程序的内存及标识符的存储属性(三)》

抱歉!评论已关闭.