设为首页 加入收藏

TOP

C语言对数组名取地址
2014-07-19 22:52:20 来源: 作者: 【 】 浏览:72
Tags:语言 对数 地址

  你有没有想过,对一个一维数组名取地址,然后用这个地址进行加减运算。这会出现什么样的结果呢

  示例:

  int a = {1,2,3,4,5};

  int *p = (int *)(&a+1);

  printf("%d\n",*(p-1));

  这个输出会是多少呢

  咦 为什么第二行需要强制转化类型呢

  答:a是一个一维数组的名字,&a相当于一个指向一维数组的指针。怎么感觉这么熟悉 指向数组的指针,那不就是行指针吗 int (*p)[]。

  行指针+1,就是对指针进行加减操作,其结果还是一个行指针~~~原来如此,需要强制转换为单指针。

  那么,输出结果是多少呢

  答:当然是5。

  为什么

  答:上面不是说了嘛,&a就是一个行指针,那就是指向一行的指针咯。行指针+1,不就指向下一行了,这里一行为 个,那么int *p = (int *)(&a+1)就要在a的基础上偏离5个位置:(如下:上一行表示偏离位数,下一行表示a[]中对应的数据)

  0 1 2 3 4 5

  1 2 3 4 5 *

  咦,这不是越界了吗 移动五位都跑出a[]数组处于‘ * ‘号位置了。哦,我看到printf()输出了。你输出的是*(p-1),这里p是一个单指针-1就是往左位移一位就行了,那不就是又回到5的位置了吗 原来是这样,输出结果是5 。

  下面我们用一段代码来显示位移情况~~~

  #include

  int main()

  {

  int a = {1,2,3,4,5};

  int *p = (int *)(&a+1); //+1相当于移动了5位

  printf("%p\n%p\nbit = %d\n",a,p,p-a);

  printf("%d\n", *(p-1));

  return 0;

  }

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇指针在函数中的调用实例 下一篇C语言获取文件名称system dir

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言指针从入门到基 (2025-12-26 05:21:36)
·【C语言指针初阶】C (2025-12-26 05:21:33)
·C语言指针的定义和使 (2025-12-26 05:21:31)
·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)