首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言核心筆記:void關鍵字五大用法與void指針本質

     編輯:關於C

void在C語言中看似簡單,實則蘊含核心類型系統設計。本文梳理五大用法與指針本質。

1. 字面含義

  • void = 「無類型」
  • void * = 「無類型指針」,可指向任意類型數據

2. 用法一:泛型數據封裝(類型擦除)

典型案例:內存操作函數

void *memcpy(void *dest, const void *src, size_t len);
void *memset(void *buffer, int c, size_t num);
int InitHardEnv(void **handle);  // 雙重指針傳出句柄

void*屏蔽具體類型,實現「一套代碼處理所有類型數據」。

3. 用法二:修飾函數返回值與參數

  • 無返回值:void func()
  • 無參數:int func(void)(C標準寫法,區別於int func()舊式聲明)

4. 用法三:void指針的賦值規則與意義

C規定:只有相同類型指針才能直接賦值。
void*作左值可「接收」任意類型指針;作右值賦給其他指針需強制轉型。

int *p1 = NULL;
char *p2 = (char*)malloc(sizeof(char)*20);
void *vp = p1;      // 左值:接收int* ✓
vp = p2;            // 左值:接收char* ✓
p1 = (int*)vp;      // 右值:需強轉回int* ✓
p1 = vp;            // 錯誤:void*不能隱式轉int*

5. 用法四:不存在void類型變量

C標準未定義void佔用內存大小,故不可聲明void a;。void僅用於類型系統佔位,非完整對象類型。

核心總結

場景關鍵點
函數無返回/無參語義明確,規篼聲明
泛型接口void*擦除類型,配合強轉還原
指針賦值左值通吃、右值必轉,編譯器強制類型安全
變量聲明禁止,因無尺寸

理解void機制,是掌握C語言類型系統與泛型編程的關鍵一步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved