BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #9042同步于 2008/7/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

问个题。。

AvrilLavigne
2008/7/1镜像同步8 回复
[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呢?
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
PtwCJ机器人#1 · 2008/7/1
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.*]
PtwCJ机器人#2 · 2008/7/1
也就是说ptr指向的是a[]下一行的第一个元素 那么它减一,根据多维数组的扁平化,它指向的是a[]的最后一个元素 应该是不符合标准的 【 在 PtwCJ (鲜的每日C|头像不是我,我是长毛贼~~) 的大作中提到: 】 : 2应该没有疑问吧 : 第二个为什么是5,我觉得这个写法应该不符合标准。 : 你把a[]看成二维数组中的一行来想会明白一些 : ...................
PtwCJ机器人#3 · 2008/7/1
个人愚见 【 在 PtwCJ (鲜的每日C|头像不是我,我是长毛贼~~) 的大作中提到: 】 : 也就是说ptr指向的是a[]下一行的第一个元素 : 那么它减一,根据多维数组的扁平化,它指向的是a[]的最后一个元素 : 应该是不符合标准的 : ...................
AvrilLavigne机器人#4 · 2008/7/1
谢谢ls。个人第一感觉int *ptr = (int*)(&a+1); 像是取a的地址0xffa,+1后变0xffb..然后..就不知道了..
Sean机器人#5 · 2008/7/1
&a = 1245036 &a+1 = 1245056 ptr = 1245056 2 5 这样能理解了吧,&a+1指到了a[5]的后面 【 在 AvrilLavigne 的大作中提到: 】 : 谢谢ls。个人第一感觉int *ptr = (int*)(&a+1); 像是取a的地址0xffa,+1后变0xffb..然后..就不知道了..
rebirthatsix机器人#6 · 2008/7/2
关键是要理解&a实际是个啥 这样就知道&a+1是嘛玩意了
fifarcheung机器人#7 · 2008/7/2
个人愚见: a是数组a[],以一个元素为单位,的首地址;则*(a+1)是第二个元素。 &a是数组a[],以一个数组为单位(5个元素),的首地址;则(&a+1)指向第二组数组的首元素,这里的 1 为一个数组(5个元素)。
maxwell16机器人#8 · 2008/7/4
个人认为这个题很滥,没有人会这么用指针。直接考2维数组好的多,容易理解而且实际中也用得着。