Chinaunix首页 | 论坛 | 博客
  • 博客访问: 394098
  • 博文数量: 85
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1707
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-27 11:18
个人简介

学无止境……

文章分类

全部博文(85)

分类: C/C++

2014-07-02 09:39:02

先上代码:
  1. #include "stdio.h"
  2. void main()
  3. {
  4.     int a[5] = {1,2,3,4,5};
  5.     int *p1, *p2;
  6.     
  7.     p1 = (int *)(&a + 1); //指向数组第六个元素地址,数组之外的下一个地址
  8.     p2 = a + 1;                //指向数组第二个元素地址
  9.     
  10.     printf("\ta:\t%d, %d, %d\n", a, a + 1, sizeof(a));
  11.     printf("\t&a:\t%d, %d,%d\n", &a, &a + 1, sizeof(&a));

  12.     printf("\t*(p1-1) = %d\n", *(p1-1));     //a[5]
  13.     printf("\t*(p2-1) = %d\n", *(p2-1));    //a[1]
  14. }
运行结果如下:
  1.         a:  -1078874684, -1078874680, 20
  2.         &a: -1078874684, -10788746644
  3.         *(p1-1) = 5
  4.         *(p2-1) = 1

 1.从程序运行结果我们可以知道: 数组名跟数组名取地址的值是相等的,都是数组的首地址。
 2.区别在它们的类型不一样,从sizeof()的打印结果看到,sizeof(a)为数组元素大小,而sizeof(&a)为整个数组空间大小,其类型为(*)[数组大小](数组指针)

 3.从上可得知为什么*(p-1)的值为5。(指针 p 指向 数组a外的下一个地址.)
阅读(1779) | 评论(0) | 转发(0) |
0

上一篇:C语言程序优化

下一篇:指针&数组

给主人留下些什么吧!~~