int *a = (int *)(p + 5);

代码: 

   int n;
    int m = 5;
    int *p = &m;
    int *a = (int *)(p + 5);

监视:

  m 5 int
-  &m 0x0017f864 {5} int *
   5 int
-  p 0x0017f864 {5} int *
   5 int
-  &p 0x0017f858 {0x0017f864 {5}} int * *
-   0x0017f864 {5} int *
   5 int
-  p + 5 0x0017f878 {157000872} int *
   157000872 int
-  (int *)(p + 5) 0x0017f878 {157000872} int *
   157000872 int
-  a 0x0017f878 {157000872} int *
   157000872 int
  *p 5 int
  *a 157000872 int
  sizeof(p) 4 unsigned int
  n -858993460 int
-  &n 0x0017f870 {-858993460} int *
   -858993460 int
-  &a 0x0017f84c {0x0017f878 {157000872}} int * *
-   0x0017f878 {157000872} int *
   157000872 int

 

int *a = (int *)(p + 5);
p的值m的地址,5是整形的数据,在这个等式里,相当于偏移量;
p的地址:0x0017f858
m的地址:0x0017f864;参与运算的是m的地址,及p的值
环境是vs2013,一个int类型的4字节,4 * 5 = 20; 就是说偏移20个字节,转换成16进制,就是14; 64 + 14 = 78;就是说(p + 5)的地址是0x0017f878,同时在这个地址里有一个数值,如上:157000872
定义一个int类型的指针a,a的值是指向数值“157000872”的地址“0x0017f878”

posted @ 2017-12-18 20:11  N_zero  阅读(483)  评论(0)    收藏  举报