c语言指针转换

Python013

c语言指针转换,第1张

没有实用意义,只能用于练脑子,或考考雕虫小技,或像鲁迅笔下的孔乙己,卖弄一下“茴香豆的回字有多少种写法”,以彰显学问有多深。

*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