指针加减

 double dArray[2] = {4, 8}, *p, *q;
 p = &dArray[0];
 q = p + 1;
 int n= q - p ; //n=1  指针加减,跟类型有关
 int m= (int)q - (int)p ;//m=8,指针的地址值进行加减,其实就是整数加减
 int k=(char*)q - (char*)p ;//k=8
 int j=(int*)q - (int*)p ;     //j=2; 

106:      double dArray[2] = {4, 8}, *p, *q;
00401368   mov         dword ptr [ebp-10h],0
0040136F   mov         dword ptr [ebp-0Ch],40100000h
00401376   mov         dword ptr [ebp-8],0
0040137D   mov         dword ptr [ebp-4],40200000h
107:      p = &dArray[0];
00401384   lea         eax,[ebp-10h]
00401387   mov         dword ptr [ebp-14h],eax
108:      q = p + 1;
0040138A   mov         eax,dword ptr [ebp-14h]
0040138D   add         eax,8
00401390   mov         dword ptr [ebp-18h],eax
109:      int n= q - p ;
00401393   mov         eax,dword ptr [ebp-18h]
00401396   sub         eax,dword ptr [ebp-14h]
00401399   sar         eax,3  //右移3位
0040139C   mov         dword ptr [ebp-1Ch],eax
110:      int m= (int)q - (int)p ;
0040139F   mov         eax,dword ptr [ebp-18h]
004013A2   sub         eax,dword ptr [ebp-14h]
004013A5   mov         dword ptr [ebp-20h],eax
111:      int k=(char*)q - (char*)p ;
004013A8   mov         eax,dword ptr [ebp-18h]
004013AB   sub         eax,dword ptr [ebp-14h]
004013AE   mov         dword ptr [ebp-24h],eax
112:      int j=(int*)q - (int*)p ;
004013B1   mov         eax,dword ptr [ebp-18h]
004013B4   sub         eax,dword ptr [ebp-14h]
004013B7   sar         eax,2
004013BA   mov         dword ptr [ebp-28h],eax

你可能感兴趣的:(指针加减)