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”

浙公网安备 33010602011771号