C語言void指標的運算操作[小知識]

衚衕裡的民工發表於2012-11-05

void *p;
p++;
...

問:如果p的值為0x7f6c5b30,執行完p++,p的值為多少?

如果是char *p,答案是0x7f6c5b31;

如果是int *p,答案可能是0x7f6c5b32(如16bit DSP),可能是0x7f6c5b34(如32bit winxp),可能是0x7f6c5b38(如64bit Linux SUSE);

如果是void *p呢?


ANSI C 規定,不可以對void指標進行運算操作,因為我們不知道指標指向的資料型別大小,無法進行偏移;

但,

GNU規定,void指標的運算操作與char型保持一致;


因此,為了程式的可移植性,我們需要在處理void指標運算時一律轉換為char型處理,例如:

void *p;
((char *)p)++;    //通過這種手段控制p的偏移


相關文章