C Language : 指標加offset的問題


        最近寫C Code遇到了指標加offset的問題,當我如果直接將pointer加數值的話
會因為資料型態的關係來影響最後計算出來的位置。例如:int 在我的電腦大小為
4bytes(這個數值不一定,看機器而定),當我定義int i = 1的時候再跟pointer相加最
後的結果是位置加4而不是加1。所以再做pointer加數值的時候應該先將pointer轉成
跟數值一樣的資料型態然後再做相加,最後再轉成pointer,這樣位置才是自己想要
的。(原因我自己還沒搞懂之後找到資料再貼上來)


============以下是程式碼===============
#include <stdio.h>

int main(int argc, char **argv)
{
unsigned int *po = (unsigned int *)malloc(sizeof(unsigned int));
int i=0;

for(i=0;i<5;i++)
{
printf("1. address = %x\n",po+i);
printf("2. address = %x\n",(unsigned int *)((unsigned int)po+i));
}
return 0;
}


=================結果=================
i=0

1. address = c08010
2. address = c08010
i=1
1. address = c08014
2. address = c08011
i=2
1. address = c08018
2. address = c08012
i=3
1. address = c0801c
2. address = c08013
i=4
1. address = c08020
2. address = c08014

張貼留言

這個網誌中的熱門文章

Unions 在C語言的簡單介紹

解釋scope.$apply用來做什麼? -- AngularJS

JavaScript的Timer用法