A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 洪吉童 于 2015-9-28 23:02 编辑

这篇文章主要讲述如何利用地址存取变量值。我们知道,指针变量存储的是变量的地址,通过指针可以存取变量的值,下面看一个简单地例子:


[cpp] view plaincopy


  • #include"stdio.h"  
  • #include"stdlib.h"   
  • void main()  
  • {  int m=7,re;                //定义变量m  
  •    int *a=&m;               //定义指针a,并将m的地址赋予a  
  •    re = *a;                 //读取m的值  
  •    *a=8;                    //改变a所指向的地址内的值  
  •    printf("%d,%d\n",re,m);           //打印   
  •     system("pause") ;             //DOS窗口停留   
  • }  

打印:7,8      

上面这段程序中将变量m的地址存在了指针变量a中,通过*a读取和改变了m中的值,那么我们现在看看指针变量中存的这个地址具体是什么值,通过下面这段代码,我们打印出m的地址


[cpp] view plaincopy


  • #include"stdio.h"  
  • #include"stdlib.h"   
  • void main()  
  • {  int m=7;                //定义变量m  
  •    int *a=&m;               //定义指针a,并将m的地址赋予a  
  •    //*a=8;                    //改变a所指向的地址内的值  
  •    printf("%X\n",a);           //以十六进制格式符打印   
  •    printf("%p\n",a);           //以指针格式符打印  
  •     system("pause") ;             //DOS窗口停留   
  • }  

打印结果:12FF7C

                     0012FF7C

都为十六进制数据0X12FF7C,那么既然知道指针变量里面存储的值,也就是变量m的地址,那么我们怎么利用这个 地址直接存取其中的值呢?


[cpp] view plaincopy

  • #include"stdio.h"  
  • #include"stdlib.h"   
  • void main()  
  • {  int m=7,re;                 //定义变量m  
  •    int *a=&m;                  //定义指针a,并将m的地址赋予a  
  •    re = *(int*)0X12FF7C;       //读取改地址中的值,也就是m的值  
  •    *(int*)0X12FF7C = 8;        //改变地址内的值,也就是m的值  
  •    printf("%d,%d\n",re,m);     //打印re,m  
  •     system("pause") ;          //DOS窗口停留   
  • }  


打印结果:7,8

那么我们成功利用这个地址数据读取和改变了这个地址中的值,下面来分析一下这两行代码


[cpp] view plaincopy


  • re = *(int*)0X12FF7C;       //读取改地址中的值,也就是m的值  
  •    *(int*)0X12FF7C = 8;        //改变地址内的值,也就是m的值  



0X12FF7C只是一个整型数据,而指针变量a中存储的是整型的指针类型的数据(int*),所以需要将0X12FF7C这个整型数据先强制转化为int*,(int*)0X12FF7C,这样一来,指针变量a==(int*)0X12FF7C,*a==*(int*)0X12FF7C,所以,上面这两行代码就跟下面这两行代码是等价的:


[cpp] view plaincopy


  • re = *a;                 //读取m的值  
  •    *a=8;                    //改变a所指向的地址内的值  

好了,今天就到这里,希望读者看过这篇文章之后,能够更好地理解指针的含义。
来自本人博客http://blog.csdn.net/hongjitong2/article/details/48791093

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马