经典指针的理解方式

你只要明白两点:  
  (1)  
  int   *p;  
  p     :   地址  
  *P   :   数据  
   
  int   p  
  p     :   数据  
  &P   :   地址  
  (2)  
  数组的内存分布  
  int   a[7]={1,2,3,4,5,6,7};  
  int   *p   =   a  
  地址             数据           获取  
  #20000           1               a[0]   ==   *(p++)  
  #20001           2               a[1]   ==   *(p++)  
  #20002           3               a[2]   ==   *(p++)  
  #20003           4               a[3]   ==   *(p++)  
  #20004           5               a[4]   ==   *(p++)  
  #20005           6               a[5]   ==   *(p++)  
  #20006           7               a[6]   ==   *(p++) 

-----------------------------------------------------------------------------------------------------------------------------------------

其实呢你理解一下指针,那这些问题就很容易了:  
  我先说明的下变量吧,你自己分析一下:  
   
  变量在程序中他的值是可以不断变化的。可用四个部分来说明一个变量(通常叫变量的四元素):  
      1.   属性   -   变量的类型  
      2.   关联   -   变量在内存中的地址  
      3.   关联值   -   与变量相关联的地址属存放的内容(即:值)  
      4.   变量名   -   程序通过名得到相它关联的地址从而得到变量的值的。  
  int   a   =   3;      
  如图:  
                    a      
                    _______________  
    2000       |____   3   ________|  
    2001       |_______________|          
       
  说明:      
      1.   声明时就会有这样的说明:   系统为一个变量开辟了一片int空间(占两个字节根据机器而言)假如地址为2000和2001,并为这空间起了个名为a使其与该地址相关联,并初始化了一个值3即:(用a   时实际就是用指向2000内的数据   3).  
      2.   指针它也是变量,同样有变量的性质   ,   只是存放的内容不是一具具本的数字,而是别的对像(变量的地址)   若   int   *p   =   a;   则:  
            p  
            --------------  
  4000   |____2000_____|   而   2000地址又是与a与相联的所以   *p   =   3;   而你在上面用:   p   =   5;  
  4001   |_____________|  
  也就是说:  
              p  
              -------------  
  4000   |____   5   _____|     这样   就不知道他把那个地址给他的了,若你这样:   *p   =   1;   就会把数据  
  4001   |____________|    
  写入到不可想像的地址中去了,也就破坏别的人的数据。  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值