C語言中,*類型就是指針類型,比如 int *p,double q,雖然是不一樣的指針,但是大小卻一樣sizeof(p) == sizeof(q),因?yàn)樗鼈兌际峭环N類型類型的。C語言是強(qiáng)類型的語言,對類型的區(qū)分十分嚴(yán)格,不同的類型占據(jù)的空間大小不同,地址偏移量也會(huì)不同;
| 基本認(rèn)識(shí)
- void可以指向任何類型的地址,但是帶類型的指針不能指向void的地址
- void*指針只有強(qiáng)制類型轉(zhuǎn)換以后才可以正常取值
- void*指針變量和普通指針一樣可以通過等于0或者NULL來初始化,表示一個(gè)空指針
- 當(dāng)void*指針作為函數(shù)的輸入和輸出時(shí),表示可以接受任意類型的輸入指針和輸出任意類型的指針
#include "stdio.h"
void *test(void *buff)
{
return buff;
}
int main()
{
int nums[] = {3, 5, 6, 7, 9};
// 初始化指針
void *p1 = NULL;
p1 = nums;
// 打印地址
printf("%d\\n", p1);
// 取值(報(bào)錯(cuò))
// printf("%d\\n", *p1);
// 取值(正常)
printf("%d\\n", *(int *)p1);
// 地址偏移(警告)
// printf("%d\\n", ++p1);
// 地址偏移(正常)
int *p2 = (int *)p1;
printf("%d\\n", p2++);
}
| 典型應(yīng)用
void*類型的指針其實(shí)本質(zhì)就是一個(gè)過渡型的指針狀態(tài),在編寫框架的時(shí)候就可以在不確定輸入的時(shí)候使用,典型的應(yīng)用有兩種:
函數(shù)傳參時(shí)不確定類型,或者要支持多類型的傳參
void function(int dataType, void* data) {
// 根據(jù)dataType的不同值,進(jìn)行不同的轉(zhuǎn)換
switch (dataType) {
case 0:
int* a = (int*)data;
case 1:
char* a = (char*)data;
...
}
}
當(dāng)函數(shù)的返回值不考慮類型指關(guān)心大小的時(shí)候
void * memcpy(void *dest, const void *src, size_t len);
void * memset ( void * buffer, int c, size_t num );
| 函數(shù)指針
各位第一眼看到下邊的函數(shù)有什么想法,是不是有種熟悉又陌生的感覺:
typedef void (*fun)(void *data1);
看看下面的用法:
#include "stdio.h"
// 定義一個(gè)函數(shù)類型
typedef void (*fun)(void *data1);
// 實(shí)例一個(gè)函數(shù)變量
fun test;
// 定義一個(gè)回調(diào)函數(shù)
void callBack(void *p1)
{
printf("%d\\n", *(int *)p1);
}
int main()
{
int a = 10;
test = callBack;
test(&a);
}
--END--
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
-
C語言
+關(guān)注
關(guān)注
183文章
7643瀏覽量
145453 -
指針
+關(guān)注
關(guān)注
1文章
484瀏覽量
71807 -
sizeof
+關(guān)注
關(guān)注
0文章
9瀏覽量
6609
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
熱點(diǎn)推薦
void指針簡述
為何在這里單獨(dú)提到空指針類型呢?主要是因?yàn)樵?b class='flag-5'>指針類型很特殊。void類型很容易讓人想到是空的意思,但對于指針而言,其并不是指空,而是指不確定。在很多時(shí)候
C語言中void指針的基本認(rèn)識(shí)及典型應(yīng)用
C語言中,*類型就是指針類型,比如 int *p,double *q,雖然是不一樣的指針,但是大小卻一樣sizeof(p) == sizeof(q),因?yàn)樗鼈兌际峭环N類型*類型的。C語言是強(qiáng)類型的語言,對類型的區(qū)分十分嚴(yán)格,不同的類型占據(jù)的空間大小不同,地址偏移量也會(huì)不
發(fā)表于 02-01 09:26
?1633次閱讀
請問如何傳入void *指針給dll函數(shù)
Labview新手,要調(diào)用dll中的一個(gè)函數(shù),它接收一個(gè)void *指針,然后把地址傳出來。我接著要用這個(gè)地址傳給它的另外一個(gè)函數(shù)。c語言的調(diào)用是這樣的。void *ptr.A(&ptr);B(ptr);請問labview該如何
發(fā)表于 05-02 13:57
IAR和Keil中void *指針編譯提示錯(cuò)誤
void *p;int FuncInt(int x,int y){return 1;}int main(void){p = FuncInt;}上面這段代碼在Keil里面沒有錯(cuò)誤和警告,在IAR里面
發(fā)表于 12-29 09:42
【設(shè)計(jì)技巧】指針的使用注意事項(xiàng):空指針、指針賦值、void *指針
的類型多么復(fù)雜,比如一個(gè)特別大的結(jié)構(gòu)體,它的指針和一個(gè) char型指針的大小本質(zhì)上是一樣的,因?yàn)?b class='flag-5'>指針就是起始地址。 正式由于這個(gè)原因,(void )型
發(fā)表于 08-20 08:30
談?wù)?b class='flag-5'>void指針的一些妙用
關(guān)注+星標(biāo)公眾號(hào),不錯(cuò)過精彩內(nèi)容轉(zhuǎn)自 | 嵌入式客棧要比較靈活的使用C語言實(shí)現(xiàn)一些高層級(jí)的框架時(shí),需要掌握一些進(jìn)階編程技巧,這篇來談?wù)?b class='flag-5'>void指針的一些妙用。測試環(huán)境采用 IAR for ...
發(fā)表于 01-26 07:20
什么是void指針?void指針有何功能
[導(dǎo)讀] 要比較靈活的使用C語言實(shí)現(xiàn)一些高層級(jí)的框架時(shí),需要掌握一些進(jìn)階編程技巧,這篇來談?wù)?b class='flag-5'>void指針的一些妙用。測試環(huán)境采用 IAR for ARM 8.40.1什么是void指針
發(fā)表于 02-21 06:01
C語言void及void指針深層探索
1.概述 本文將對void關(guān)鍵字的深刻含義進(jìn)行解說,并詳述void及void指針類型的使用方法與技巧。 2.void的含義
發(fā)表于 09-21 11:36
?166次下載
深入了解void指針背后的機(jī)理
當(dāng)使用關(guān)鍵字void聲明指針變量時(shí),它將成為通用指針變量。任何數(shù)據(jù)類型(char,int,float等)的任何變量的地址都可以賦值給void指針
發(fā)表于 05-06 09:49
?1654次閱讀
淺談void 型指針的高階用法
要比較靈活的使用C語言實(shí)現(xiàn)一些高層級(jí)的框架時(shí),需要掌握一些進(jìn)階編程技巧,這篇來談?wù)?b class='flag-5'>void指針的一些妙用。測試環(huán)境采用 IAR for ARM 8.40.1 什么是void指針
STM32編程:void指針高階用法舉例,設(shè)計(jì)一個(gè)通用掉電存儲(chǔ)子系統(tǒng)
[導(dǎo)讀] 要比較靈活的使用C語言實(shí)現(xiàn)一些高層級(jí)的框架時(shí),需要掌握一些進(jìn)階編程技巧,這篇來談?wù)?b class='flag-5'>void指針的一些妙用。測試環(huán)境采用 IAR for ARM 8.40.1什么是void指針
發(fā)表于 12-27 18:47
?10次下載
STM32編程:void指針高階用法
[導(dǎo)讀] 要比較靈活的使用C語言實(shí)現(xiàn)一些高層級(jí)的框架時(shí),需要掌握一些進(jìn)階編程技巧,這篇來談?wù)?b class='flag-5'>void指針的一些妙用。測試環(huán)境采用 IAR fo...
發(fā)表于 02-07 11:14
?2次下載
一文揭秘C語言的void指針
void *表示一個(gè)“不知道類型”的指針,也就不知道從這個(gè)指針地址開始多少字節(jié)為一個(gè)數(shù)據(jù)。和用int表示指針異曲同工,只是更明確是“指針”。
什么是void指針
評(píng)論