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

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的偏移


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章