void指針的基本概念
void的意思就是“無(wú)類(lèi)型”,void指針則為“無(wú)類(lèi)型指針”,void指針可以指向任何類(lèi)型的數(shù)據(jù)。所以void指針一般被稱(chēng)為通用指針或者泛指針,或者叫做萬(wàn)能指針定義形式 : void *p;
**在C語(yǔ)言中在任何時(shí)候都可以用void類(lèi)型的指針來(lái)代替其他類(lèi)型的指針,void指針可以指向任何數(shù)據(jù)類(lèi)型的變量****如果要通過(guò)void指針去獲取它所指向的變量值時(shí)候,需要先將void指針強(qiáng)制類(lèi)型轉(zhuǎn)換成和變量名類(lèi)型想匹配的數(shù)據(jù)類(lèi)型指針后再進(jìn)行操作;**指針的強(qiáng)類(lèi)類(lèi)型轉(zhuǎn)化: void *p; int *pa = (int *)p; 然后才能對(duì)原來(lái)的void指針指向的空間進(jìn)行操作任何類(lèi)型的指針都可以賦值給void指針,無(wú)需進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換; float f = 1.22f; float *p1 = &f; p = p1;//將float指針賦值被pvoid指針的應(yīng)用場(chǎng)合: 當(dāng)進(jìn)行純粹的內(nèi)存操作的時(shí)候,或者傳遞一個(gè)指向未定類(lèi)型的指針時(shí),可以使用void指針; void* memcpy(void *addr1,void *addr2,size_t n); 該函數(shù)只進(jìn)行純粹的內(nèi)存拷貝,包括NULL字符在內(nèi)的任何內(nèi)容都將被拷貝
1:對(duì)函數(shù)參數(shù)的限定2:對(duì)函數(shù)返回的限定3:void指針也常用作函數(shù)指針代碼如下所示:
#include<stdio.h>int main(void){ int num1 = 1; char char1 = 'b'; /*定義兩個(gè)void指針類(lèi)型*/ void *void_pointer_1; void *void_pointer_2; /*給不同的void指針指向不同的數(shù)據(jù)類(lèi)型*/ void_pointer_1 = &num1; void_pointer_2 = &char1; 數(shù)據(jù)指針數(shù)據(jù)指針的概念: 在嵌入式編程當(dāng)中,可能在特定的內(nèi)存但愿讀寫(xiě)內(nèi)容,匯編有對(duì)應(yīng)的MOV命令,而除了C/C++以外的編程語(yǔ)言基本上沒(méi)有直接訪問(wèn)內(nèi)存的能力 利用數(shù)據(jù)指針可直接 通過(guò)內(nèi)存地址操作特定的內(nèi)存
如:在地址0XFF00FF00對(duì)應(yīng)的內(nèi)存但愿中寫(xiě)入11unsigned int *p = (unsigned int *)0XFF00FF00;*p = 11;數(shù)據(jù)指針操作特定的內(nèi)存的時(shí)候一定要謹(jǐn)慎,不是所有內(nèi)存都可以操作,必須要對(duì)硬件比較了解后,才能進(jìn)行操作(可能會(huì)出現(xiàn)段錯(cuò)誤)
代碼能夠run,如果有需要的話(huà),可以直接拉下來(lái)run一下,看看結(jié)構(gòu)體數(shù)組是怎么進(jìn)行初始化操作和使用的。謝謝大家的訪問(wèn),如有寫(xiě)的不好的地方,希望大家能夠及時(shí)的提出來(lái),謝謝觀看
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注