亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于void*的作用

關于void*的作用

Helenr 2019-04-08 11:18:57
void*指針有什么用?(不是哪些情況用void,而是關于后面的疑問->)int轉void*再轉回int*,跟int*轉float*再轉回int*從結果來說不是一樣的么?void*作為"中間人"的功能,float*也能做到,用void*僅僅是為了“看起來”合乎邏輯?
查看完整描述

2 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

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*的!
                            
查看完整回答
反對 回復 2019-04-08
  • 2 回答
  • 0 關注
  • 638 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號