c语言指针的问题
今天有人问了我这个问题,我是从来没见过,求救啊
int a[5]={1,2,3,4,5};
int *ptr = (int *)((int)a +1);
上面怎么解释?(int)a是什么意思?
[解决办法]
不能解释结果为什么是那个,(int)a +1就是把地址强制转换成整型,那么加1就是一般的加1字节了,而不是地址的加4个字节了。
int a[5]={1,2,3,4,5};00C53618 mov dword ptr [ebp-1Ch],1 00C5361F mov dword ptr [ebp-18h],2 00C53626 mov dword ptr [ebp-14h],3 00C5362D mov dword ptr [ebp-10h],4 00C53634 mov dword ptr [ebp-0Ch],5 int *ptr = (int *)((int)a +1);00C5363B lea eax,[ebp-1Bh] 00C5363E mov dword ptr [ebp-28h],eax printf("%d\n", *ptr);
[解决办法]
前几天看过这样的一个帖子,原帖好像是这个问题#include<stdio.h>int main(){ int a[]={1,2,3,4,5}; int *ptr2=(int *)((int)a+1); int *ptr1=(int *)(&a+1); printf("%x,%x\n",ptr1[-1],ptr2);}