C语言,如下代码: int main (void) { int a[] = {10, 20, 30, 40, 50};

如下代码:
int main (void) {
int a[] = {10, 20, 30, 40, 50};
printf ("%d\n",*((int*)(&a + 1) - 1));
return 0; 结果什? 求详解

详解如下:

1、使用上了 &a 相当于将 a数组二维化,类似于扩展成了

    int b[1][5] = {10, 20, 30, 40, 50};

2、&a + 1 类似于 b + 1

    b + 1 加的是5个元素, &a + 1 也是5个元素

    此时指针指向的是 b[1][0] 的地址,也即 a[5] 的地址

3、将二维数组再次转换回一维数组 (int*)(&a + 1),但是此时他的地址是 a[5]的地址;

4、(int*)(&a + 1) - 1,表示的是a[5]的地址-1,所以是a[4]的地址;

5、*((int*)(&a + 1) - 1),相当于取 a[4]的地址里的值,即 a[4] = 50

所以答案是50;

这类问题一般涉及的c语言的深度比较深,我是ndk吧的吧主,在平时学习c语言的

过程中又遇到编程不懂的问题,可以到ndk吧来发帖,也希望能够关注一下ndk吧,链接:

http://tieba.baidu.com/f?kw=ndk

温馨提示:答案为网友推荐,仅供参考
相似回答