一段搜索地址的C代码【原】

今天一边学习C语言的指针和数组名关系,了解到了程序中的内存分配区域,随后写了这段代码,看一下申请内存的地址。顺便发现指针的运算还有这些方法(不再 是课本中的指针之间运算无意义)。也可以利用把指针归零,再指向一定的偏移量,这样你就可以查看进程的内存空间了。  这段代码还没有办法查看栈的地址。看以后有什么办法做到。
//=======================================
/*
* author: Vangelee
* http://hi.baidu.com/romeroad/blog/item/d1cd418d6ebfc819b21bbac7.html
*
*
-------------------
|       程序栈         |----------高地址--〉低地址(向下增长)
-------------------
|          堆            |----------向上增长
-------------------
|          BSS         |----------数据段
| 全局和静态变量 |
-----------------------------低地址
|     可执行代码     |----------代码段
-------------------
*/

#include <stdio.h>

static int sint = 1;
int gint = 2;
int gint2 = 4;

void printAddr(void *add) {
printf("%x /n" , add);   
}

void fun1(void) {   
printf("fun1 is ");
printAddr(&fun1);
}

void fun2(void) { }

main() {
void (*fun)(void);
char * buf1,*buf2;
char *gp = NULL;


printAddr(&sint);
printAddr(&gint);
printAddr(&gint2);

printf("=========function address ==========/n");
printAddr(fun);
fun = &fun1;
printAddr(fun);
fun = &fun2;
printAddr(fun);

printf("=========Heap address ==========/n");
buf1 = (char *) malloc(16);
buf2 = (char *) malloc(16);
printAddr(buf1);
printAddr(buf2);
free(buf1);
free(buf2);

printf("=========invoke function ==========/n");
printf("main is ");
printAddr(&main);
fun1();

printf("=========move pointer ==========/n");   
gp = NULL;           //利用这个把指针归零
gp += (int)&sint;     //看到指针跟指针的运算了吧,呵呵 其实是地址的运算 。
//所以指针之间的运算还是有价值的!
printf("%d /n",sint);
printf("%d /n",*gp);
printAddr(gp);
printAddr(&sint);


}

//====================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值