当前位置:   article > 正文

如何区分:int *p = (int *)(&a + 1) 和 int *p1 = &(a + 1)_int* p1=#

int* p1=#

在C语言的学习中对&a + 1, 和&(a +1)很疑惑,查找后的结果,与各位交流一下,哪里有对的也请指正。

当数组是 一维数组时, 数组名是以一个数组元素为颗粒度,表现为“当数组名加1时,这里的1表示一个数组元素单元”,例子中的数组元素为整数,所以数组名加1时地址加4;

而 数组名取地址&以整个数组为颗粒度,表现为“当数组名取地址&加1时,这里的1是表示整个数组单元”,例子中的数组为有5个元素的整型数组,所以数组名取地址&加1时,地址加20.

  1. 1 #include <stdio.h>
  2. 2 #include <string.h>
  3. 3
  4. 4 int main(){
  5. 5 int a[4] = { 1, 2, 3, 4};
  6. 6 int *ptr1 = (int *)(&a + 1);
  7. 7 printf("%x %x", ptr1[-1], *(a + 1));
  8. 8 return 0;
  9. 9
  10. 10 }

输出结果是: 4 2

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/215331
推荐阅读
相关标签
  

闽ICP备14008679号