返回信息流[quote]#include <stdio.h>
int main()
{
int a[] = {1,2,3,4,5};
int *ptr = (int*)(&a+1);
printf("%d %d" , *(a+1), *(ptr-1) );
getchar();
getchar();
}
[/quote]为什么输出是2,5呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #9042同步于 2008/7/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
问个题。。
AvrilLavigne
2008/7/1镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
2应该没有疑问吧
第二个为什么是5,我觉得这个写法应该不符合标准。
你把a[]看成二维数组中的一行来想会明白一些
【 在 AvrilLavigne (Avril Lavigne) 的大作中提到: 】
: 标 题: 问个题。。
: 发信站: 北邮人论坛 (Tue Jul 1 15:00:01 2008), 站内
:
: [quote]#include <stdio.h>
: int main()
:
: {
: int a[] = {1,2,3,4,5};
: int *ptr = (int*)(&a+1);
: printf("%d %d" , *(a+1), *(ptr-1) );
: getchar();
: getchar();
: }
: [/quote]为什么输出是2,5呢?
: --
: --------------------------------------
: Tomorrow it may change..
: --------------------------------------
:
: ※ 来源:·北邮人论坛 http://forum.byr.edu.cn·[FROM: 219.239.243.*]
也就是说ptr指向的是a[]下一行的第一个元素
那么它减一,根据多维数组的扁平化,它指向的是a[]的最后一个元素
应该是不符合标准的
【 在 PtwCJ (鲜的每日C|头像不是我,我是长毛贼~~) 的大作中提到: 】
: 2应该没有疑问吧
: 第二个为什么是5,我觉得这个写法应该不符合标准。
: 你把a[]看成二维数组中的一行来想会明白一些
: ...................
个人愚见
【 在 PtwCJ (鲜的每日C|头像不是我,我是长毛贼~~) 的大作中提到: 】
: 也就是说ptr指向的是a[]下一行的第一个元素
: 那么它减一,根据多维数组的扁平化,它指向的是a[]的最后一个元素
: 应该是不符合标准的
: ...................
&a = 1245036
&a+1 = 1245056
ptr = 1245056
2 5
这样能理解了吧,&a+1指到了a[5]的后面
【 在 AvrilLavigne 的大作中提到: 】
: 谢谢ls。个人第一感觉int *ptr = (int*)(&a+1); 像是取a的地址0xffa,+1后变0xffb..然后..就不知道了..
个人愚见:
a是数组a[],以一个元素为单位,的首地址;则*(a+1)是第二个元素。
&a是数组a[],以一个数组为单位(5个元素),的首地址;则(&a+1)指向第二组数组的首元素,这里的 1 为一个数组(5个元素)。