第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

void *是什么意思,以及如何使用它?

void *是什么意思,以及如何使用它?

C
楊魅力 2019-10-14 14:20:04
今天,當(dāng)我閱讀別人的代碼時(shí),我看到類似的含義,分別對函數(shù)名稱和變量類型意味著void *func(void* i);什么void*?另外,我們什么時(shí)候需要使用這種指針以及如何使用它?
查看完整描述

3 回答

?
撒科打諢

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊

指向的指針void是“通用”指針類型。void *可以將A 轉(zhuǎn)換為任何其他指針類型,而無需顯式強(qiáng)制轉(zhuǎn)換。您不能取消引用a void *或?qū)ζ鋱?zhí)行指針?biāo)阈g(shù);您必須先將其轉(zhuǎn)換為指向完整數(shù)據(jù)類型的指針。


void *通常用于需要在同一代碼中使用不同指針類型的地方。一個(gè)經(jīng)常被引用的例子是庫函數(shù)qsort:


void qsort(void *base, size_t nmemb, size_t size, 

           int (*compar)(const void *, const void *));

base是數(shù)組的地址,是數(shù)組nmemb中元素的數(shù)量,size是每個(gè)元素的大小,并且compar是指向比較數(shù)組中兩個(gè)元素的函數(shù)的指針。它的調(diào)用方式如下:


int iArr[10];

double dArr[30];

long lArr[50];

...

qsort(iArr, sizeof iArr/sizeof iArr[0], sizeof iArr[0], compareInt);

qsort(dArr, sizeof dArr/sizeof dArr[0], sizeof dArr[0], compareDouble);

qsort(lArr, sizeof lArr/sizeof lArr[0], sizeof lArr[0], compareLong);

陣列表達(dá)式iArr,dArr以及l(fā)Arr隱式從數(shù)組類型轉(zhuǎn)換為指針類型的函數(shù)調(diào)用,并且每個(gè)被隱式地從“指針轉(zhuǎn)換int/ double/ long”到“指針void”。


比較功能如下所示:


int compareInt(const void *lhs, const void *rhs)

{

  const int *x = lhs;  // convert void * to int * by assignment

  const int *y = rhs;


  if (*x > *y) return 1;

  if (*x == *y) return 0;

  return -1;

}

通過接受void *,qsort可以使用任何類型的數(shù)組。


使用void *它的缺點(diǎn)是您將類型安全性丟到了窗外并迎面而來。沒有什么可以防止您使用錯(cuò)誤的比較例程:


qsort(dArr, sizeof dArr/sizeof dArr[0], sizeof dArr[0], compareInt);

compareInt期望其參數(shù)指向ints,但實(shí)際上與doubles 一起使用。在編譯時(shí)沒有辦法解決這個(gè)問題。您將得到一個(gè)錯(cuò)誤排列的數(shù)組。


查看完整回答
反對 回復(fù) 2019-10-14
?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊

使用void *表示該函數(shù)可以采用不需要為特定類型的指針。例如,在套接字函數(shù)中,


send(void * pData, int nLength)

這意味著您可以通過多種方式調(diào)用它,例如


char * data = "blah";

send(data, strlen(data));


POINT p;

p.x = 1;

p.y = 2;

send(&p, sizeof(POINT));


查看完整回答
反對 回復(fù) 2019-10-14
?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊

就這一點(diǎn)而言,C非常出色??梢哉f虛無就是虛無虛無*是一切(可以是一切)


只是這個(gè)微小的*有所作為。


雷內(nèi)指出了這一點(diǎn)。無效*是指向某個(gè)位置的指針。怎樣“解釋”什么留給用戶。


這是在C中具有不透明類型的唯一方法。可以在glib或常規(guī)數(shù)據(jù)結(jié)構(gòu)庫中找到非常突出的示例。在“ C接口和實(shí)現(xiàn)”中對其進(jìn)行了非常詳細(xì)的介紹。


我建議您閱讀完整的章節(jié)并嘗試?yán)斫狻矮@取它”的指針的概念。


查看完整回答
反對 回復(fù) 2019-10-14
  • 3 回答
  • 0 關(guān)注
  • 1250 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號