文章还是由一个程序的来:注 sizeof(int)=4,小端模式
1. int iArray【5】 = {1,2,3,4,5}
2.int * piArray = iArray;
3.unsigned char* pucArray = (unsigned char*) (piArray+2);
4.printf(“%x,%x”,pucArray【0】,pucArray【2】);
结果输出3 0
如果將3改為unsigned char* pucArray = (unsigned char*) ((unsigned char*)piArray+2);
結果輸出 0 2
unsigned char* pucArray = (unsigned char*) (piArray+2);和
unsigned char* pucArray = (unsigned char*) ((unsigned char*)piArray+2);
有什麽區別呢?
首先得明白指针的访问方式。
unsigned char* pucArray = (unsigned char*) (piArray+2)中PiArray+2表示的内存关系是
PiArray的地址+2*sizof(int)
而unsigned char* pucArray = (unsigned char*) ((unsigned char*)piArray+2)中(unsigned char*)piArray+2表示的内存关系是PiArray的地址+2*sizeof(unsigned char)
显然这那个地址不一样。
那么如果上例比較沒有概念的話,那么piArray++的內存關係最有說服力。PiArray++ 相當于piArray = piArray+1;
這裡面就有一個需要注意的問題,就是指針+1義是指針下個元素的地址。
指針的地址Type *p;
P+i 的地址P的address+i*sizoef(Type);