例1:以下代码有助于理解上述概念。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> int k = 1; int main() { int i = 1; char *j; static int m = 1; char *n = "hello"; printf("栈区地址为:0X%x ", &i);/*变量n位于栈上,其内容为一地址,指向位于文字常量区的"hello", 此时"hello"在内存中只有一份拷贝;而语句“char a[]="hello";”则不同, a是一个位于栈上的有6个元素(含字符串末尾的空字符)的数组,并将"hello" 拷贝到它占的内存中,此时"hello"有两份拷贝。*/ j = (char*)malloc(2); free(j);//及时释放 printf("堆区地址为:0X%x ", j); printf("全局变量地址为:0X%x ", &k); printf("静态变量地址为:0X%x ", &m); printf("文字常量区地址为:0X%x ", n); printf("程序区地址为:0X%x ", &main); system("pause"); return 0; }