天天看點

void 指針的轉換

任何類型的指針都可以顯式轉換為void類型,且不會丢失資料。如以下程式:

#include<stdio.h>

int main(void)

{

short a=5;

void *p1;

short *p2;

p1=(void *)&a;

p2=(short *)p1;

printf(“%d\n”,*p2);

return 0;

}

    a的位址為0x0012ff7c,是以p1中存放位址0x0012ff7c,其資料為5,但5不能通過p1通路;如果要通路資料,可以通過顯式轉換将p1轉化為short類型(資料5本身就是short類型),即p2,此時通過調用p2便可以通路資料5,其資料不會丢失。

在上面這個情況中,在同樣長度的指針格式互相轉換,其大小不變,并且資料不會失真。

如果一個void的指針被強制轉換為int,之後又轉換為long時,大小會發生變化,同時資料也會失真。

繼續閱讀