掌握 C 语言 void 指针:解锁灵活高效的编码技巧
在编程语言中,某些概念能让编码变得更轻松。例如,void 指针可根据最终用户的输入在 C 语言中确定具体数据类型。这引出了我们对 C 语言 void 指针的讨论。
与其他指针一样,void 指针因其灵活性而具有相关功能。但如果您想在编码时节省时间,首选指针函数就是 void 指针。它允许您同时存储和检索不同类型的对象。接下来,您将学习关于 C 语言 void 指针的所有编码技巧。
(编程语言示意图)
1. 什么是 C 语言中的 void 指针?
通常,void 指针是不带任何关联数据类型的指针。换句话说,它们就像空容器。这一特性使它们能够保存未知数据类型的变量地址。
C 语言的 void 指针功能允许您将其类型转换为其他数据类型,从而实现轻松的内存分配。随后,这使得内存分配中的字节操作等通用功能成为可能。此外,C 语言中的 void 指针有助于执行通用函数。
(C 语言中的简单 “Hello World” 程序)
https://commons.m.wikimedia.org/wiki/File:C_Hello_World_Program.png
2. void 指针在 C 语言中如何工作?
总的来说,指针功能对编程至关重要,至少在地址管理和内存分配方面体现了其重要性。
指针有两种不同类型:通用指针和 void 指针。我们的重点是 void 指针及其在 C 语言中的工作原理。
要在 C 语言中拥有 void 指针,只需使用关键字 “void” 声明一条信息。
总的来说,引用和解引用在通用指针概念中发挥作用。此处的解引用是指获取存储在指针变量中的值。
因此,如果指针值与可用数据类型无关,您可以选择类型转换。
但请注意,void 指针完全不支持任何算术运算。我们改用间接运算符 “*”。因此,在缺少关联数据类型时,类型转换变得必要。类型转换将声明的数据类型与 void 指针关联。否则,运行程序会显示编译器错误。
void 的大小类似于 C 语言中的字符指针。大小对象因指针平台而异。
这些内存管理函数是 malloc() 和 calloc()。它们有助于分配所需数据类型的内存。在某种程度上,内存分配使用的格式让函数指针增强其他功能。
(指针在 C 语言中工作原理的图示)
https://commons.m.wikimedia.org/wiki/File:C_pointer_3.svg
3. void 指针的语法
通常,必须使用正确的语法来导入任何编程功能。因此,C 语言中 void 指针的语法是:
void *pointer_name;
其中 “void” 是指针类型的关键字。pointer_name 是我们指向并分配地址的指针名称。
以此为例:
int b = 6
char c = 'z';
因此,当我们包含 void 指针变量时:
void *p = &b; // void 指针分配并保存整型 'b' 的地址
p = &c; // void 指针也保存字符 'c' 的地址
进一步,让我们强调一些语法示例:
int i = 6; // 初始化整型变量
int *p; // 整型指针声明
void *ptr; // void 指针声明
float *fp; // 浮点型指针声明
p = fp; // 无效指针
ptr = p; // 有效指针
fp = &i; // 无效指针
ptr = &i; // 有效指针
ptr = fp; // 有效指针
4. C 语言中 void 指针的示例及样例代码
接下来,我们看下面代码片段中 void 指针参数的示例:
样例代码 #1
在第一个代码示例中,我们展示如何使用 malloc() 函数:
#include <stdio.h>
#include<malloc.h>
int main()
{
int a = 90;
int *x = (int*)malloc(sizeof(int)) ;
x = &a;
printf(“pointed value by x pointer : %d”, *x);
return 0;
}
输出
样例代码 #2
在下一个代码中,我们展示类型转换的概念。
#include <stdio.h>
int main()
{
void *ptr = NULL; // void 指针变量
int *p = NULL; // 整型指针变量
char *cp = NULL; // 字符指针变量
float *fp = NULL; // 浮点指针变量
// void 指针大小
printf(“void pointer size = %d\n\n”, sizeof(ptr));
// 整型指针大小
printf(“integer pointer size = %d\n\n”, sizeof(p));
// 字符指针大小
printf(“character pointer size = %d\n\n”, sizeof(cp));
// 浮点指针大小
printf(“float pointer size = %d\n\n”, sizeof(fp));
return 0;
}
输出
此外,请参阅下方关于 C 语言 void 指针代码的视频链接。
https://youtu.be/-503stjWLhc
5. void 指针的用途
void 指针在 C 语言编程中具有广泛的相关性。
- 它们有助于指向任意数据类型的变量。
为更好理解,请参阅下面的代码示例。其中包括:
#include<stdio.h>
void main()
{
int num = 10; // 初始化普通变量
void *ptr; // 声明 void 指针
ptr = # // 将 Ptr 指针指向 num
printf(“The value of integer variable is= %d”, *ptr );
}
然而,运行此代码会导致编译时错误。如果对同一代码使用类型转换来解引用指针,则可获得期望输出:
#include<stdio.h>
void main()
{
int num = 10; // 初始化普通变量
void *ptr; // 声明 void 指针
ptr = # // 将 Ptr 指针指向 num
printf(“The integer variable value is %d”, *(int*)ptr ); // 使用类型转换解引用
}
整型变量的值是 10。
因此,通过类型转换,我们可以解引用 void 指针。
所以,虽然 void 指针不支持指针算术,但类型转换解决了这个问题。输出变为:
(Void 指针通过揭示数据变量位置使编码更轻松)
- 借助 calloc() 和 malloc(),void 指针有助于为所有数据类型分配内存位置。
举例说明,见下面的代码:
int main(void)
{
// 注意 malloc() 函数返回 void *
// 接着,类型转换为任意数据类型,如 char *, int * 等
int *x = malloc(sizeof(int) * n);
}
注:上述程序仅在 C 语言中编译通过。
- 最后但同样重要的是,void 指针变量有助于在 C 语言中实现通用函数。
结论
void 指针功能总体上是一种重要的编程工具。程序员发现它很有用,因为它不关联任何数据类型。至少,它消除了指针将不同值和数据类别相互指向的混淆。因此,void 指针减少了过度的类型转换。它也支持通用指针数据类型。因此,它也是一种通用编译器。
您已获得在 C 语言中使用 void 指针的完整指南。然而,如果您有疑问或需要其他编程资源,我们的联系页面随时可用。
工业技术