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

如下代码:intmain(void){inta[]={10,20,30,40,50};printf("%d\n",*((int*)(&a+1)-1));return0;结... 如下代码:
int main (void) {
int a[] = {10, 20, 30, 40, 50};
printf ("%d\n",*((int*)(&a + 1) - 1));
return 0; 结果什? 求详解
展开
 我来答
fukeainideren
推荐于2018-03-13 · TA获得超过1934个赞
知道小有建树答主
回答量:461
采纳率:100%
帮助的人:163万
展开全部

详解如下:

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

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式