Re: [问题] 一个reference的问题

楼主: XX124188 (kinger)   2014-08-28 03:26:00
※ 引述《kdok123 (小天)》之铭言:
: int a[5]={1,2,3,4,5};
: int *ptr=(int *)(&a+1);
: printf("%d",*(ptr-1));
: 输出是5
: int a[5]={1,2,3,4,5};
: int *ptr=(int *)(a+1);
: printf("%d",*(ptr-1));
: 输出是1
: 我能理解第二个例子,可是第一个例子是什么意思?
: 我尝试把a和&a都印了出来,发现两个位址是一样的
: a+1和&a+1分别和a及&a的位址差距,一个是4一个是20(4*5)
: 可以理解是跟矩阵大小有关
: 但还是不理解&a+1的意思...
: 有人可以帮我解说吗??
: 感谢!
请问为什么会前进5个int@@?
作者: arthur104 (arthur)   2014-08-28 08:18:00
可以想成 int a[][5], 所以 &a + 1 会跑到 a[1][0]所以 ptr - 1 就会是 a[0][5],因为compiler会自动认为a的一个row有5个element,所以 &a + 1就是一次跳5个
作者: sadanlu (孤冬)   2014-08-28 10:32:00
因为第二个a指标指向阵列名称, a + 1就会指向下一个阵列名称, 然后因为转型成int指标, ptr - 1就变成第一个阵列的最后一个元素

Links booklink

Contact Us: admin [ a t ] ucptt.com