Cprogramming 简明教程

void Pointer in C

void Pointer in C

C 中的 void pointer 是一种未与任何数据类型关联的指针类型。void 指针可以容纳任何类型的地址,并且可以转换为任何类型。它们也称为通用或泛型指针。

在 C 编程中,函数 malloc()calloc() 返回“ void * ”或泛型指针。

Declaring void Pointer

这是用于声明 void 指针的语法 −

void *ptr;

Example of void Pointer

以下示例显示了如何在 C 程序中使用 void 指针 −

#include <stdio.h>

int main(){

   int a = 10;
   char b = 'x';

   // void pointer holds address of int a
   void *ptr = &a;
   printf("Address of 'a': %d", &a);
   printf("\nVoid pointer points to: %d", ptr);

   // it now points to char b
   ptr = &b;
   printf("\nAddress of 'b': %d", &b);
   printf("\nVoid pointer points to: %d", ptr);
}

Output

运行代码并检查其输出:

Address of 'a': 853377452
Void pointer points to: 853377452
Address of 'b': 853377451
Void pointer points to: 853377451

An Array of void Pointers

我们可以声明 void pointersarray 并存储指向不同 data types 的指针。

void 指针是指针,在 C 中可以容纳任何数据类型的内存地址。因此,void 指针数组是可以存储内存地址的数组,但这些地址可以指向不同数据类型的变量。

您还可以将 pointers 存储到任何用户定义的数据类型(例如数组和 structures )中。

Example

在此示例程序中,我们声明了一个空指针数组并将其存储在每个下标的不同类型(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\n", *((int *)arr[0]));
   printf("Float: %f\n", *((float *)arr[1]));
   printf("String: %s\n", *((char **)arr[2]));

   return 0;
}

当你运行这段代码时,它将产生以下输出:

Integer: 100
Float: 20.500000
String: Hello

Application of void Pointers

下面列出了一些空指针的常见应用 −

  1. 函数 malloc() 可用作头文件 stdlib.h 中的库函数。它会在程序运行时动态分配内存块。函数 variables 的普通声明会导致内存分配在编译时完成。

void *malloc(size_t size);

  1. 空指针用于实现通用函数。动态分配函数 malloc()calloc() 返回“ void *”类型,这一特性允许使用这些函数分配任何数据类型的内存。

  2. 空指针的最常见应用是数据结构的实现,例如 linked liststreesqueues 等动态数据结构。

Limitations of void Pointer

空指针具有以下限制:

  1. 由于其具体大小,空指针不能在 Pointer arithmetic 中使用。

  2. 它不能作为解引用使用。

  3. 空指针不能与 increment or decrement operators 一起使用,因为它没有特定的类型。