int a[] = {1,2, 3, 4,5}; int *ptr2 = (int*)((int)a +1); 下面那一句是什么意思

2024年11月22日 21:28
有3个网友回答
网友(1):

翻译一下:
int *ptr2 = ***;
声明一个整形指针指向某个地址;
这个地址是:(int*)((int)a+1);
(int)a,a是数组名,也是数组首地址,一般是32为的某一个数值,比如说
a =0x12345678,(int)a将a转换成整型值,0x12345678,然后将这个数值加1,
变成0x12345679,然后再将其转换成地址,兜了一大圈,其实就是将ptr2指向a的下一字节。注意不是数组的下一个元素,因为一个元素有4个字节,下一个元素地址应该是0x1234567C。

注意此处int *ptr2 = (int*)((int)a +1);
与int *ptr2 = (int*)(a +1); 的区别,前者是使之指向下一字节,后者是使之指向下一个元素。

不过,这样做藐视没什么意义。

网友(2):

将ptr2指向a地址的下一个地址,如我运行的结果:
a=1245020, *a=1
ptr2=1245021,*ptr2=33554432

这样赋值没有什么意义,存储在*ptr里面的值是一些之前赋值的截取、组合

如果令ptr2=a+1,那ptr2就执行a[]的第二个元素了(即a[1])

网友(3):

刚刚调试了一下,是地址的操作问题,这个我执行后的地址是1245009
而&a[0]是1245008
&a[1]是1245012