以下代码的输出是()
int
a[
5
]={
1
,
2
,
3
,
4
,
5
};
int
*ptr=(
int
*)(&a+
1
);
printf(
"%d,%d"
,*(a+
1
),*(ptr-
1
));
2,5
数组名的值是一个指针常量,也就是数组第一个元素的地址。*(a+1)等同于a[1],*(a+1)=2。
&a+1指向数组最后一个元素的下一个位置,故*(ptr-1)指向数组的最后一个元素。
a 代表的是int * 每次步长为一个int
&a 代表的是 int[]* 每次步长为所指向的数组的大小
故
ptr 指向的是数组a最后一个元素的下一个元素
所以ptr-1指向的是数组a的最后一个元素
a+1指向的是数组a的第二个元素