pointer endianess sizeof()

来源:互联网 发布:java log4j 用法 编辑:程序博客网 时间:2024/05/01 00:47
#include <iostream>using namespace std;int main(int argc, char* argv[]){int a[5] = {1,2,3,4,5};cout<<sizeof(a)<<endl;int *ptr1 = (int *)(&a+1);int *ptr2 = (int *)((int)a+1);cout<<hex<<ptr1[-1]<<endl<<hex<<*ptr2<<endl; // negative index!cout<<dec<<sizeof(int)<<"   "<<sizeof(a)<<"   "<<sizeof(ptr1)<<endl; // remember to change back to dec!system("pause");return 0;}


running result:

20520000004   20   4


explanation:

1) sizeof(a) = 5*4

2) note that &a is the address of a, (&a+1) points to a[5] => ptr[-1] points to a[4]

3) 32-bit x86 system => little-endian

     a[0]             a[1]0x01 00 00 00     0x02 00 00 00

((int)a+1) points to the second byte of a[0] => ptr2 points to "00 00 00 02" => 0x02000000


原创粉丝点击