您的位置:首页 > 编程语言 > C语言/C++

C语言中,局部变量、全局变量、静态变量、堆、栈的内存地址

2013-02-01 22:04 316 查看
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void before()
{

}

char g_buf[16];
char g_buf2[16];
char g_buf3[16];
char g_buf4[16];
char g_i_buf[]="123";
char g_i_buf2[]="123";
char g_i_buf3[]="123";

void after()
{

}

int main(int argc, char **argv)
{
char l_buf[16];
char l_buf2[16];
char l_buf3[16];
static char s_buf[16];
static char s_buf2[16];
static char s_buf3[16];
char *p_buf;
char *p_buf2;
char *p_buf3;

p_buf = (char *)malloc(sizeof(char) * 16);
p_buf2 = (char *)malloc(sizeof(char) * 16);
p_buf3 = (char *)malloc(sizeof(char) * 16);

printf("g_buf: 0x%x\n", g_buf);
printf("g_buf2: 0x%x\n", g_buf2);
printf("g_buf3: 0x%x\n", g_buf3);
printf("g_buf4: 0x%x\n", g_buf4);

printf("g_i_buf: 0x%x\n", g_i_buf);
printf("g_i_buf2: 0x%x\n", g_i_buf2);
printf("g_i_buf3: 0x%x\n", g_i_buf3);

printf("l_buf: 0x%x\n", l_buf);
printf("l_buf2: 0x%x\n", l_buf2);
printf("l_buf3: 0x%x\n", l_buf3);

printf("s_buf: 0x%x\n", s_buf);
printf("s_buf2: 0x%x\n", s_buf2);
printf("s_buf3: 0x%x\n", s_buf3);

printf("p_buf: 0x%x\n", p_buf);
printf("p_buf2: 0x%x\n", p_buf2);
printf("p_buf3: 0x%x\n", p_buf3);

printf("before: 0x%x\n", before);
printf("after: 0x%x\n", after);
printf("main: 0x%x\n", main);

if (argc > 1)
{
strcpy(l_buf, argv[1]);
}
return 0;
}


源代码如上,结果如下

g_buf: 0x80499c8
g_buf2: 0x80499a8
g_buf3: 0x80499d8
g_buf4: 0x80499b8
g_i_buf: 0x8049964
g_i_buf2: 0x8049968
g_i_buf3: 0x804996c
l_buf: 0xbffff6f8
l_buf2: 0xbffff6e8
l_buf3: 0xbffff6d8
s_buf: 0x8049998
s_buf2: 0x8049988
s_buf3: 0x8049978
p_buf: 0x804a008
p_buf2: 0x804a020
p_buf3: 0x804a038
before: 0x8048424
after: 0x8048429
main: 0x804842e


可以看到,从低地址到高地址,如图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐