指针题

这篇博客主要探讨了C/C++编程中的指针题目,包括多个示例,涉及指针的使用、内存地址的16进制打印等方面。
摘要由CSDN通过智能技术生成

指针题

例1:

int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
int *ptr = (int *)(&a + 1);
printf( "%d,%d", *(a + 1), *(ptr - 1));
return 0; 
}
结果:2  5
解释:*(a + 1)相当于a[1];
	*(ptr - 1))就是数组指针指向下一个数组,再退回一步。

例2:

int main()
{
int a[4] = { 1, 2, 3, 4 };
int *ptr1 = (int *)(&a + 1);
int *ptr2 = (int *)((int)a + 1);
printf( "%d,%x", ptr1[-1], *ptr2); 
return 0; 
 }
 结果:4   2000000
 解释:&a是数组指针,指向一个数组,相当于int(*)[4]这样的类型。
 &a+1,就是指向下一个4个元素的数组,并且地址与这个a[4]挨着。  
 (int *)(&a + 1)把它由数组指针强转成int指针,此时指向4后边的位置。
 ptr[-1]相当于*(ptr - 1),指针又退回一步,指向上一个数组的最后一个元素4。
  (int)a就是把指向a数组的第一个字节的地址转成int
   (int)a + 1就是向后移动一个字节,也就是a[0]的四个字节的第二个字节.
    然后转成int*,再解引用后就往后读四个字节。

然后%x按照16进制打印。

例3:

struct Test
{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值