Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4242402
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: C/C++

2011-05-14 09:55:45

先看一个代码的实现
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int a[5];
  5.     
  6.     printf("address a is %p, \n&a is %p\n\n",a,&a);
  7.     printf("address a+1 is %p,\n&a+1 is %p\n\n",a+1,&a+1);

  8.     return 0;
  9. }

  1. ywx@yuweixian:~/yu/professional/3$ ./or
  2. address a is 0xbf84f6cc,
  3. &a is 0xbf84f6cc

  4. address a+1 is 0xbf84f6d0,
  5. &a+1 is 0xbf84f6e0

从上面知道: a   =  0xbf84f6cc
             &a  =  0xbf84f6cc

这两个地址是相同的!! 那么他们又有什么区别呢 ??

             a+1  =   0xbf84f6d0  在a的基础上 + 4
             &a+1 =   0xbf84f6e0  在 &a 的基础上 +4*5


分析:
   
    a 表示    它指向a[0] 的首地址

    &a 也是指向了地址,但是它是指向了整个a[5]的地址,它的首地址是a[0],

   这两个 首地址是相同的,所以说,它们指向相同的地址了


   那么
  
   a+1 : 它指向了 a[1] 的地址
   &a+1 : 它指向了a[5] 整个内存后面的一个地址,



   a的类型用 int * 表示

    &a”的类型用“int (*)[5]”描述:“*”表示这是个指针类型,“int [5]”表示这个指针指向一个由5个“int”所构成的一维数组。


阅读(878) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~