执行结果截图:
可对比如下内存布局:
代码:
#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;
}