一个经典的关于指针与数组的加“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 之间的意义,说深了就是指针与数组之间的转化问题。 

posted @ 2015-11-06 15:01  linux_发烧友  阅读(456)  评论(0)    收藏  举报