数组,指针的移动

来源:互联网 发布:合工大网络视频课 编辑:程序博客网 时间:2024/05/22 10:44
#include<stdio.h>  int main()  {      int  a[5] = { 1, 2, 3, 4, 5 };      int *ptr = (int * )(&a + 1);      printf("%d %d\n", *(a + 1), *(ptr - 1));      return 0;  }

程序运行的结果是:2,5.2这个结果没什么异议*(ptr-1)为什么5呢? 因为是&a+1移动的是一整个数组的长度(&a是整个数组的长度5*int),之后强制类型转换(int*),ptr-1移动之后的字组长度的首地址再向后移动一个int, 到了前面数组的最后一个字节地址了, 所以是5.

经测试把a[5]改成a[6], 加一个元素6 , 输出也是6.

#include<stdio.h>  int main()  {      int  a[6] = { 1, 2, 3, 4, 5, 6 };      int *ptr = (int*)(&a + 1);      printf("%d %d\n", *(a + 1), *(ptr - 1));      return 0;  }

&a 改成&a[0] ,移动的就是一个int了,结果为2,1, 如下:

#include<stdio.h>  int main()  {      int  a[5] = { 1, 2, 3, 4, 5 };      int *ptr = (int*)(&a[0] + 1);   //这样改后  "int *" 可以不要了.      printf("%d %d\n", *(a + 1), *(ptr - 1));      return 0;  }
0 0
原创粉丝点击