一道c语言题目希望有非常详细的解析过程🙏?

为什么第二个算出来会是5?计算过程是怎样的?... 为什么第二个算出来会是5?计算过程是怎样的? 展开
 我来答
aepuxop
2019-12-09
知道答主
回答量:57
采纳率:0%
帮助的人:7.2万
展开全部
# include <stdio.h>

int main(void)
{
int a[5] = {1,2,3,4,5};

printf("数组地址 = %#X\n",a);
printf("数组地址 = %#X\n",&a[0]);
printf("数组元素地址a0 = %#X\n",&a[0]);

printf("数组元素地址a4 = %#X\n",&a[4]);

printf("不存在的数组元素地址a5 = %#X\n",&a[5]);

printf("地址 = %#X\n",&a + 1);
printf("地址 = %#X\n",( &a[0] + 5 ) );
printf("数组a[4]的值 = %#X\n", *(a)+4 );

int *p = (int *)(&a + 1);

printf("%d\n", *(p-1));
return 0;

}

数组地址 = 0X22FF50
数组地址 = 0X22FF50
数组元素地址a0 = 0X22FF50
数组元素地址a4 = 0X22FF60
不存在的数组元素地址a5 = 0X22FF64
地址 = 0X22FF64
地址 = 0X22FF64
数组a[4]的值 = 0X5
5

int *p = ( int * ) ( &a+1 ) // 把16进制数,强制转化成地址,赋值给地址变量p
徐凯捷s6
2019-12-09
知道答主
回答量:27
采纳率:100%
帮助的人:6.6万
展开全部
*p = (&a + 1) 表示的是 指向 a数组整体的下一个地址, 所以当 p-1的时候就指到了a数组最后一个元素。(&a + 1) 与 *(a+1)的区别吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
新来后到
2019-12-09 · TA获得超过340个赞
知道答主
回答量:1327
采纳率:6%
帮助的人:87.1万
展开全部
非语言的问题,我又不是程序员,我怎么知道谁呀?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
这个冬天不再冷020
2019-12-09 · 我是一名中年油腻大叔。
这个冬天不再冷020
采纳数:472 获赞数:2299

向TA提问 私信TA
展开全部
编程的东西非常复杂。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chengshao71
2019-12-09 · 超过13用户采纳过TA的回答
知道答主
回答量:74
采纳率:50%
帮助的人:20.2万
展开全部
a数组长度5个int,&a+1相当于 (&a)+5
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式