void在不同场景下的意义

简介: void在不同场景下的意义

指针一般有三种含义:


一是指明数据的位置,体现在指针的值,表示一个地址。


二是表示数据类型的大小,例如int指针表示四个字节为一组数据,体现在指针的加减法如何计算。


三是表示数据如何被解释,例如float指针和int指针,它们都是4字节,32bits,但是它们的解释完全不同。这体现在它们解引用的结果。


著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在C语言中,void数据类型表示“没有值”的意思,它不可用于变量或者常量声明,而是主要用于以下场景:


  • 用于函数声明的void


没有返回值的函数,其返回值类型是void。例如标准库函数free()的声明如下:

void free(void*ptr);

参数列表中的void表示此函数调用没有参数。例如函数tempfile()的声明如下:

FILE *tempfile(void);


如果在调用tempfile()函数时尝试传入参数,则编译器会报错。

  • 数据类型为void的表达式

void表达式即没有值的表达式。因此,对返回值类型为void的函数的一次调用,就是一种void表达式,例如对free()函数的调用。

如果显式地将表达式的值转换为void型,则会丢弃表达式的返回值,例如:

(void)printf("hello world!\n");


上面这个调用将丢弃printf()函数的返回值。

  • void指针

void*是一种指针类型,表示一个对象的地址 ,但没有说明该对象的数据类型。可以使用这种没有指定类型的指针来声明函数的返回值类型以及函数的参数,从而让函数可以处理各种类型的指针变量,如malloc() 、free() 等内存管理函数就属此类:


void *malloc(size_t size);
void free(void *ptr);

如下面的代码所示,可以将一个void指针值赋予另一种类型的指针变量,反之亦可,这种赋值操作不需要进行显示式的类型转换。

#include <stdio.h>
#include <stdlib.h>   //提供malloc()、free()、rand()、srand()、exit()的声明
#include <time.h>     //提供time()的声明
int main()
{
     size_t n=100;
     int *nums=malloc(sizeof(int)*n);//malloc()返回一个void指针。
     if (nums==NULL)
     {
          fprintf(stderr,"Insufficient memory .\n");
          exit(1);
     }
     srand(time(NULL));
     for (size_t i=0;i<n;++i)
         nums[i]=rand()%n;
     for (size_t i=0;i<n;++i)
         printf("%d ",nums[i]);
     free(nums);
     return 0;
}


相关文章
|
机器学习/深度学习 存储 监控
yolov5单目测距+速度测量+目标跟踪(算法介绍和代码)
yolov5单目测距+速度测量+目标跟踪(算法介绍和代码)
|
3月前
|
存储 运维 安全
阿里云服务器2核4G与4核8G配置解析:实例规格、价格及选择指南
阿里云服务器2核4G和4核8G配置凭借其均衡的性能与性价比,成为中小企业及开发者群体的热门选择。通用算力型u1实例2核4G5M带宽80G ESSD Entry云盘特惠价199元1年,个人用户最低531.79元1年,4核8G配置价格最低的是通用算力型u1实例,活动价格为955.58元1年起,除此之外,还有计算型c7、c9i、c8y等计算型实例有2核4G与4核8G配置可选。具体配置还需要看想要购买的云服务器实例规格和配置及带宽大小。本文将结合2025年最新活动价格,深度解析阿里云服务器2核4G与4核8G配置的实例规格、适用场景及选择策略,以供参考。
|
7月前
|
存储 虚拟化 数据中心
VMware ESXi 8.0U3e macOS Unlocker & OEM BIOS Dell (戴尔) 定制版
VMware ESXi 8.0U3e macOS Unlocker & OEM BIOS Dell (戴尔) 定制版
222 7
VMware ESXi 8.0U3e macOS Unlocker & OEM BIOS Dell (戴尔) 定制版
|
8月前
|
机器学习/深度学习 自然语言处理 搜索推荐
《让机器人读懂你的心:情感分析技术融合奥秘》
情感分析技术正赋予机器人理解人类情绪的能力,使其从冰冷的工具转变为贴心伙伴。通过语音、面部表情和文本等多模态信息,机器人可精准识别情绪并做出相应反应。然而,多模态数据融合、个性化情感理解及自然情感表达仍是技术难点。一旦突破,机器人将在医疗、教育和养老等领域大放异彩,成为患者助手、个性化教师和老人陪伴者,开启人机交互新纪元。这不仅是一次技术飞跃,更是机器人迈向情感世界的深刻变革。
577 0
|
Linux Docker 容器
CentOS7使用阿里源安装最新版Docker
CentOS7使用阿里源安装最新版Docker
10641 0
|
人工智能 算法 物联网
企业级RAG全链路优化关键技术
本文深入解析了企业级RAG全链路的关键技术、效果优化、性能优化及应用实践。
2371 2
企业级RAG全链路优化关键技术
|
设计模式 网络协议 Java
Reactor 模式网络服务器【I/O多路复用】(C++实现)
Reactor 模式网络服务器【I/O多路复用】(C++实现)
1500 1
|
存储 移动开发 算法
Quorum NWR:通过仲裁实现数据一致性
Quorum NWR:通过仲裁实现数据一致性
260 11
|
自然语言处理 算法 Windows
HanLP — 命名实体识别
HanLP — 命名实体识别
418 1
【GEC6818开发板】Linux驱动中printk无法在终端输出显示
【GEC6818开发板】Linux驱动中printk无法在终端输出显示