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; 结果什? 求详解 展开
int main (void) {
int a[] = {10, 20, 30, 40, 50};
printf ("%d\n",*((int*)(&a + 1) - 1));
return 0; 结果什? 求详解 展开
1个回答
展开全部
详解如下:
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吧,链接:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询