5个回答
展开全部
# include <stdio.h>
int main(void)
{
int a[5] = {1,2,3,4,5};
printf("数组地址 = %#X\n",a);
printf("数组地址 = %#X\n",&a[0]);
printf("数组元素地址a0 = %#X\n",&a[0]);
printf("数组元素地址a4 = %#X\n",&a[4]);
printf("不存在的数组元素地址a5 = %#X\n",&a[5]);
printf("地址 = %#X\n",&a + 1);
printf("地址 = %#X\n",( &a[0] + 5 ) );
printf("数组a[4]的值 = %#X\n", *(a)+4 );
int *p = (int *)(&a + 1);
printf("%d\n", *(p-1));
return 0;
}
数组地址 = 0X22FF50
数组地址 = 0X22FF50
数组元素地址a0 = 0X22FF50
数组元素地址a4 = 0X22FF60
不存在的数组元素地址a5 = 0X22FF64
地址 = 0X22FF64
地址 = 0X22FF64
数组a[4]的值 = 0X5
5
int *p = ( int * ) ( &a+1 ) // 把16进制数,强制转化成地址,赋值给地址变量p
int main(void)
{
int a[5] = {1,2,3,4,5};
printf("数组地址 = %#X\n",a);
printf("数组地址 = %#X\n",&a[0]);
printf("数组元素地址a0 = %#X\n",&a[0]);
printf("数组元素地址a4 = %#X\n",&a[4]);
printf("不存在的数组元素地址a5 = %#X\n",&a[5]);
printf("地址 = %#X\n",&a + 1);
printf("地址 = %#X\n",( &a[0] + 5 ) );
printf("数组a[4]的值 = %#X\n", *(a)+4 );
int *p = (int *)(&a + 1);
printf("%d\n", *(p-1));
return 0;
}
数组地址 = 0X22FF50
数组地址 = 0X22FF50
数组元素地址a0 = 0X22FF50
数组元素地址a4 = 0X22FF60
不存在的数组元素地址a5 = 0X22FF64
地址 = 0X22FF64
地址 = 0X22FF64
数组a[4]的值 = 0X5
5
int *p = ( int * ) ( &a+1 ) // 把16进制数,强制转化成地址,赋值给地址变量p
展开全部
*p = (&a + 1) 表示的是 指向 a数组整体的下一个地址, 所以当 p-1的时候就指到了a数组最后一个元素。(&a + 1) 与 *(a+1)的区别吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
非语言的问题,我又不是程序员,我怎么知道谁呀?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
编程的东西非常复杂。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a数组长度5个int,&a+1相当于 (&a)+5
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询