执行结果截图:
可对比如下内存布局:
代码:
#include "stdio.h" #include "stdlib.h" #include "string.h" // 全局变量a在全局初始化区 int a = 0; // 全局变量p1在全局未初始化区 char * p1; int main() { int i; // 局部变量b在栈 int b; // 字符串常量abc在常量区,局部变量s在栈 char s[] = "abc"; // 局部变量p2在栈 char * p2 = NULL; // 字符串常量123456在常量区,局部变量p3在栈 char * p3 = "123456"; // 静态变量c在全局(静态)初始化区 static int c = 0; /* p1是全局变量,在全局未初始化区 * p2是局部变量,在栈 * 所申请的10个字节和20个字节的动态内存区域在堆区, */ p1 = (char *)malloc(10 * sizeof(char)); if (NULL == p1) { exit(1); } p2 = (char *)malloc(20 * sizeof(char)); if (NULL == p2) { exit(1); } strcpy(p1, "123456"); printf("&a: %p\n", &a); printf("&b: %p\n", &b); printf("&s: %p, s: %p, * s: %s\n", &s, s, s); printf("&c: %p\n", &c); printf("&p2: %p, p2: %p, * p2: ",&p2, p2); for (i = 0; i < 20; i++) { printf("%c", p2[i]); } putchar('\n'); printf("&p1: %p, p1: %p, * p1: ", &p1, p1); for (i = 0; i < 10; i++) { printf("%c", p1[i]); } putchar('\n'); printf("&p3: %p, p3: %p, * p3: %s\n", &p3, p3, p3); free(p1); free(p2); return 0; }