这里是一个使用 void *
作为指针算法的通用性的例子:
#include <stdio.h>
int main() {
int array[] = {1, 2, 3, 4, 5};
int *ptr = array; // ptr 是一个指向整型的指针
void *vptr = ptr; // vptr 是一个void指针,存储了ptr的值
// 使用void指针进行指针算法
for (int i = 0; i < 5; i++) {
// 在访问void指针所指向的值之前,需要将其转换回原始类型
printf("void指针所指向的值是: %d\n", *(int *)(vptr + i * sizeof(int)));
}
return 0;
}
在这个例子中,我们定义了一个整型数组 array
和一个指向这个数组的指针 ptr
。然后,我们将 ptr
的值赋给了一个 void *
类型的指针 vptr
。
在 for
循环中,我们使用 void *
指针 vptr
来进行指针算法。我们通过 vptr + i * sizeof(int)
来计算数组中下一个元素的地址。由于 vptr
是 void *
类型的,这种计算不会改变地址值,只是按照字节进行移动。在访问 void
指针所指向的值之前,我们将其显式地转换为 int *
类型,然后进行解引用操作以获取存储在数组中的值。
这个例子展示了如何使用 void *
指针来进行指针算法,而不用关心指针的具体类型。这种方法在处理不同类型的数据时提供了灵活性,但需要注意的是,在使用 void *
指针时,必须确保类型转换的正确性,以避免未定义行为。