void*指針其實可以用作泛型,你想象一下你在C中要交換兩個變量,如果是兩個整數的話,就像:voidswap_int(int*lhs,int*rhs){inttmp=*lhs;*lhs=*rhs;*rhs=tmp;}如果要交換小數,那還要寫一個voidswap_float(float*lhs,float*rhs){;//}那么既然都是把兩個變量的bitpattern交換一下,那就可以把這種方法抽象出來:voidswap(void*lsh,void*rhs){;//}因為你不知道究竟要交換多少個bit,所以,還需要一個參數來指定要交換的bit的數量:voidswap(void*lsh,void*rhs,size_tsize){;//}有了這樣一個函數,那么如果想要交換兩個變量,那就可以:swap(&ai,&bi,sizeof(int));swap(&af,&bf,sizeof(float));題主修改了題目,我也加點,以我的知識,我不確定題主后面這句話是否正確用void*僅僅是為了“看起來”合乎邏輯但是,用回上面的例子,如果我用float*代替void*,那的確是可以的,但是我為什么每次調用它都要先做強制類型轉換swap((float*)&ai,(float*)&bi,sizeof(int)),你把這樣一個接口給另外的一個人使用,他會怎么想?我擦,你交換兩個整數,還要先轉換為float*,萬一給個新手,人家還不敢用,我擦,你這里面有什么奧妙么?的確,void*和其他指針一樣,都是占同樣大小的內存空間,唯一和其他指針不同的就在于你不能對void*進行解引用,看起來其他類型的指針都可以用void*來代替,只要在解引用之前把它轉換為相應類型的指針就OK了!那么,如果是這樣的話,那用void*的確是為了看起來合乎邏輯。我暫時也想不到有哪些情況是必須要用上void*的!