首页
社区
课程
招聘
[原创]我所理解的指针
发表于: 2012-10-18 17:42 4177

[原创]我所理解的指针

2012-10-18 17:42
4177
菜鸟拙见,请,勿喷!不对的地方请多指教!
  指针中存放有另一个对象的地址,说白了就是存放了一个地址,打个比方,我要找张三,但是我没有张三的电话号码,但我有李四的电话号码,李四有张三的电话号码。于是我就先找到李四要张三的电话号码,李四就相当于是一个指针。我通过李四(地址)找到了张三(变量)!
  每个指针都有一个相关的类型,不同类型的指针之间的区别不是在指针表示上,也不是在指针所持有的值上。而是,指针类型可以告诉编译器怎样解释特定地址内存中的内容。以及该内存跨多少个内存单元,就如一个int行指针寻址到1000内存处,那么32位的机器上,跨越的地址空间为1000-1003;
“*”为解引用操作符来间接的读写指针所指向的对象。
  int i=100;
  int *pi = 0;
  int *pi2 = &i;//pi2被赋值为i的地址;
  pi = pi2;
  pi2 = 0;//pi2现在未指向任何对象;
  pi = i;//指针不能持有非地址值;
//指针不能被初始化或赋值为其他类型对象的地址值;
  double dval;
  double *pd = &dval;
//无效的类型赋值
//int * <==double *  
  pi = pd;
  pi = &dval;
不是说pi不能有与dval相关联内存的地址:能,但不允许,因为虽然pi与pd可以有相同的内存值,但对那块内存解释完全不同。
  指针可以让它的地址值增加或减少一个整数值,并不是对数据的加减运算,指针加1,意味着增加了该类型一个对象的长度。
    int i=10;
    int *pi=&i;//假如i的地址为0x0012ff7c
    printf("%p\r\n",pi);
    *pi = *pi+1;//增加了pi指向数据的值
    printf("%d\r\n",*pi);
    pi = pi+1;//增加的是地址的值,现在的地址变为0x0012ff7c+sizeof(int)=0x0012ff80;
    printf("%p \r\n",pi);

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
电话号码就是指针,你跟李四打电话是读取了李四变量的值,而这个值正好就是张三的指针(电话号码)
mov eax,[李四]
mov eax,[eax]
eax现在就是张三的值了,指针不存放另一个变量的地址,指针就是地址
2012-10-18 23:06
0
雪    币: 122
活跃值: (72)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
指针也讨论呀,为何不讨论一下指针类型的问题。
2012-10-20 04:35
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
觉得指针比较重要的是指针的类型
2012-10-22 02:06
0
雪    币: 225
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
只要知道指针是一块内存的开始地址就ok
2012-10-22 10:29
0
游客
登录 | 注册 方可回帖
返回
//