C 语言中的 void 指针
C 语言中的 void 指针
C 语言中的 void 指针 是一种不与任何数据类型关联的指针类型。void 指针可以保存任何类型的地址,并且可以强制转换为任何类型。它们也被称为通用指针或泛型指针。
在 C 语言编程中,函数 malloc() 和 calloc() 返回"void *"或泛型指针。
声明 void 指针
以下是声明 void 指针的语法 -
void *ptr;
void 指针示例
以下示例展示了如何在 C 程序中使用 void 指针 -
#include <stdio.h> int main(){ int a = 10; char b = 'x'; // void 指针保存 int a 的地址 void *ptr = &a; printf("Address of 'a': %d", &a); printf(" Void pointer points to: %d", ptr); // 它现在指向 char b ptr = &b; printf(" Address of 'b': %d", &b); printf(" Void pointer points to: %d", ptr); }
输出
运行代码并检查其输出 −
Address of 'a': 853377452 Void pointer points to: 853377452 Address of 'b': 853377451 Void pointer points to: 853377451
空指针数组
我们可以声明一个由空指针组成的数组,并将指针存储到不同的数据类型中。
空指针是 C 语言中可以保存任何数据类型内存地址的指针。因此,空指针数组是一个可以存储内存地址的数组,但这些地址可以指向不同数据类型的变量。
您还可以将指向任何用户定义数据类型(例如数组和结构)的指针)存储在空指针中。指针。
示例
在此示例程序中,我们声明了一个 void 指针数组,并在其中存储了指向不同类型变量(int、float 和 char *)的指针,这些变量的下标分别对应不同的类型。
#include <stdio.h> int main(){ void *arr[3]; int a = 100; float b = 20.5; char *c = "Hello"; arr[0] = &a; arr[1] = &b; arr[2] = &c; printf("Integer: %d ", *((int *)arr[0])); printf("Float: %f ", *((float *)arr[1])); printf("String: %s ", *((char **)arr[2])); return 0; }
输出
运行此代码时,将产生以下输出 -
Integer: 100 Float: 20.500000 String: Hello
void 指针的应用
以下列出了 void 指针的一些常见应用 -
-
malloc() 函数作为库函数位于头文件 stdlib.h 中。它在程序运行时动态分配一块内存。正常的 variables 声明会导致在编译时分配内存。
void *malloc(size_t size);
void 指针用于实现泛型函数。动态分配函数 malloc() 和 calloc() 返回"void *"类型,此特性允许使用这些函数分配任何数据类型的内存。
void 指针的局限性
void 指针具有以下局限性−