测试代码
#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; }
运行结果