这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 探讨一个数组和指针的问题

共17条 1/2 1 2 跳转至

探讨一个数组和指针的问题

高工
2013-10-14 12:42:56     打赏

这是一个公开课中看到的题目,拿来与大家探讨一下:

 int a[5]={1,2,3,4,5};

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

 printf("%d,%d,*(a+1),*(ptr-1)");

请写出输出变量并解释详细的步骤,第一个回答完整的将有20积分友情赠送。




关键词: 指针     数组    

院士
2013-10-14 13:15:55     打赏
2楼
我加磅

专家
2013-10-14 15:05:26     打赏
3楼

 printf("%d,%d",*(a+1),*(ptr-1));

应该是这样的吧。

指针真是个无底洞呀。分析错了。经过度娘提示,才恍然大迷瞪:

调试结果:2 ,5

int *ptr=(int *)(&a+1);指针*ptr指在a[5]的位置;

printf("%d,%d",*(a+1),*(ptr-1));//*(a+1)就是a[1]=2,*(ptr-1)为a【5】-sizeof(int*),a[4],结果为5


高工
2013-10-14 17:53:08     打赏
4楼

运行结果:

分析;

 int a[5]={1,2,3,4,5};     

 int *ptr=(int *)(&a+1);   //(&a+1)=&a + 1×(5×sizeof(int)),,ptr指向的地址是&a[4]+sizeof(int)

 printf("%d,%d”,*(a+1),*(ptr-1)); //*(a+1)=2这个很明显。后面那个*(ptr-1)就是a[4]=5

 


高工
2013-10-14 19:30:38     打赏
5楼

厉害啊,可惜最多只能选10分,不好意思了


高工
2013-10-14 19:31:04     打赏
6楼
分析的很棒,10分奉上

高工
2013-10-14 19:35:52     打赏
7楼

"*(ptr-1)为a【5】-sizeof(int*),a[4],结果为5"

以上的数组中不存在“a[5]”,所以应该如liklon所述”a【4】+sizeof(int*)“

嘿嘿嘿 多谢指点啊


高工
2013-10-14 19:36:46     打赏
8楼
高端大气上档次,哈哈哈老大豪情。

院士
2013-10-14 19:52:21     打赏
9楼

这个简直太神奇了。

以后多留意一下牛X人们写的牛X代码。


高工
2013-10-14 20:42:34     打赏
10楼

指针太神奇了,不同环境下的“1”也各有千秋啊。


共17条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]