*p 的“星号”是 “求值运算”,如果p是指针,*p 则是 指针 p 指向的值。
如果 p 不是指针, 那么 这个 *p 就不知道是什么东东,可能是乘法,也可能是错的,那就闲着没事练脑了。
(int *) 是“强制转换”,有星号,则是“指针地址类型转换”,例如 char *p="1" (int *) p 就 把 p 的首地址变成 int 型 指针指向的地址,原来 p+1 是 p 的地址加1 ,现在 成了 p+sizeof(int)。 *(int *) p 就是首地址指向处4个字节长度内存里的数值了。
*(int *)*p 不知道有何意义,要把程序写全,才好猜,很费脑子的。简单思维,可以说是一个错误表达式。
一个指针做算数加减的时候,字面上的加一或者减一,实际增加或者减少的值是其指向类型的空间大小也就是说,p+1,实际增长的值是sizeof(*p)
所以,将p转为int*后,加10,实际增加是10*sizeof(int)也就是40
而如果是p+2,由于p是char*,实际增加的是2*sizeof(char)=2