一个经典的关于指针与数组的加“1”与减“1”问题。
#include<stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
return 0;
}
答案 : 2,5.
第一次发博客,就和大家分享 一个经典的数组指针问题,希望大家给予建议。
很简单的 一个 指针的 与数组的转化,理解了这个肯定会理解指针数组的问题。
*(a+1)=a[0]+1;答案自然就是 2了;
难点主要就在理解int *ptr=(int*)(&a+1);
(首先大家应该懂的 任何类型的指针所指向的地址总为4字节大小。)
&a是对整个数组取地址,因为每个元素为int类型,所以总大小为20个字节,
&a+1就相当于 一个二维数组,而指针有一个特性就是永远指向最后一个的下一个,指向所*ptr就指向了
不存在的下一个假象的a数组的第一个元素,因为*ptr是4个字节,所以*ptr-1就指向了实际存在的a数 组 的最后一个元素,所以*ptr-1所指向的 答案为 5;
这个过程主要就在于大家如何理解*a 和 &a 之间的意义,说深了就是指针与数组之间的转化问题。

浙公网安备 33010602011771号