5 void 分析
阿新 • • 發佈:2020-08-29
目錄
函式定義中 void 的意義
-
如果一個函式定義沒有顯式地指明返回值和引數,那麼預設的返回值型別是
int
,引數可以是任意個#include <stdio.h> f() { printf("f()\n"); } int main() { int i = f(); int j = f(1, 2); int k = f(1, 2, 3); return 0; } //輸出結果 f() f() f()
-
void
修飾函式的返回值和引數- 如果函式沒有返回值,那麼應該將其宣告為
void
- 如果函式沒有引數,應該宣告其引數為
void
void
修飾函式返回值和引數是為了表示“無”
- 如果函式沒有返回值,那麼應該將其宣告為
void 指標的意義
-
C語言規定只有相同型別的指標才可以相互賦值
-
void*
指標作為左值用於“接收”任意型別的指標 -
void*
指標作為右值使用時需要進行強制型別轉換#include <stdio.h> #include <stdlib.h> int main() { int* pI = (int*)malloc(sizeof(int)); char* pC = (char*)malloc(sizeof(char)); void* p = NULL; int* pni = NULL; char* pnc = NULL; p = pI; //void*指標作為左值使用 pni = p; //error:void*指標作為右值使用需要進行強制型別轉換 p = pC; //void*指標作為左值使用 pnc = p; //error:void*指標作為右值使用需要進行強制型別轉換 return 0; }
-
通過
void*
實現 MemSet 函式- 函式作用:將一段記憶體中的每個位元組都設定為一個固定的數
#include <stdio.h> #include <stdlib.h> //void*:可以接受任意型別的指標 void MemSet(void* src, int length, unsigned char n) { //定義一個位元組的指標 unsigned char* p = (unsigned char*)src; int i = 0; for (i = 0; i < length; i++) { p[i] = n; } } int main() { int a[5]; int i = 0; //都設定為0 MemSet(a, sizeof(a), 0); for (i = 0; i < 5; i++) { printf("%d\n", a[i]); } char c[6]; //都設定為1 MemSet(c, sizeof(c), 1); for (i = 0; i < 6; i++) { printf("%d\n", c[i]); } return 0; }