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 指针具有以下局限性−

