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

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

C程序中void指針的概念

C程序中void指針的概念

C
慕萊塢森 2019-12-07 16:49:56
是否可以取消引用void指針而無需使用C編程語言進(jìn)行類型轉(zhuǎn)換?另外,有沒有一種方法可以泛化一個(gè)可以接收指針并將其存儲(chǔ)在void指針中的函數(shù),并且通過使用該void指針,我們可以制作一個(gè)泛化的函數(shù)嗎?例如:void abc(void *a, int b){   if(b==1)      printf("%d",*(int*)a);     // If integer pointer is received   else if(b==2)      printf("%c",*(char*)a);     // If character pointer is received   else if(b==3)      printf("%f",*(float*)a);     // If float pointer is received}我想使此函數(shù)通用而不使用if-else語句-這可能嗎?另外,如果有很好的互聯(lián)網(wǎng)文章解釋了空指針的概念,那么如果您提供URL,那將是有益的。另外,使用空指針的指針?biāo)阈g(shù)是否可能?
查看完整描述

3 回答

?
慕雪6442864

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

是否可以取消引用void指針而不用C編程語言進(jìn)行類型轉(zhuǎn)換...


否,void表示沒有類型,您不能取消引用或分配給它。


有沒有一種方法可以泛化一個(gè)可以接收指針并將其存儲(chǔ)在void指針中的函數(shù),通過使用該void指針,我們可以創(chuàng)建一個(gè)泛化的函數(shù)。


您不能僅僅以可移植的方式取消引用它,因?yàn)樗赡芪凑_對(duì)齊。在像ARM這樣的某些體系結(jié)構(gòu)上,這可能是個(gè)問題,其中指向數(shù)據(jù)類型的指針必須在數(shù)據(jù)類型的大小的邊界處對(duì)齊(例如,指向32位整數(shù)的指針必須在4字節(jié)邊界處對(duì)齊才能取消引用)。


例如,uint16_t從閱讀void*:


/* may receive wrong value if ptr is not 2-byte aligned */

uint16_t value = *(uint16_t*)ptr;

/* portable way of reading a little-endian value */

uint16_t value = *(uint8_t*)ptr

                | ((*((uint8_t*)ptr+1))<<8);

另外,是否可以使用帶空指針的指針?biāo)阈g(shù)...


void由于缺少指針下方的具體值以及大小,因此無法對(duì)指針進(jìn)行算術(shù)運(yùn)算。


void* p = ...

void *p2 = p + 1; /* what exactly is the size of void?? */


查看完整回答
反對(duì) 回復(fù) 2019-12-07
?
泛舟湖上清波郎朗

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

在C語言中,void *無需顯式轉(zhuǎn)換即可將a轉(zhuǎn)換為指向不同類型對(duì)象的指針:


void abc(void *a, int b)

{

    int *test = a;

    /* ... */

但是,這不利于以更通用的方式編寫函數(shù)。


您不能通過void *將a 轉(zhuǎn)換為其他指針類型來取消引用,因?yàn)槿∠弥羔槙?huì)獲得指向?qū)ο蟮闹?。裸名void不是有效類型,因此無法取消引用a void *。


指針?biāo)阈g(shù)是將指針值更改為sizeof所指向?qū)ο蟮谋稊?shù)。同樣,由于void不是真正的類型,sizeof(void)因此沒有任何意義,因此指針?biāo)惴ㄔ谏蠠o效void *。(某些實(shí)現(xiàn)允許使用,將等效指針?biāo)惴ㄓ糜赾har *。)


查看完整回答
反對(duì) 回復(fù) 2019-12-07
  • 3 回答
  • 0 關(guān)注
  • 568 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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