当前位置: 首页 > news >正文

C语言之void类型的本质

一:C语言属于强类型语言

        (1)编程语言分两种:强类型语言和弱类型语言。强类型语言所有的变量都有自己固定的类型,这个类型有固定的类型占用,有固定的解析方法;弱类型语言中没有类型的概念,所有变量都是一个类型)(一般都是字符串的),程序在用的时候在根据需求来处理变量

        (2)C语言就是强类型的语言,C语言中所有的变量都有明确的类型。因为C语言中的一个变量都要对应内存中的一段内存,编译器需要这个变量的类型来确定这个变量占用内存的字节数和这一段内存的解析方法。

二:数据类型的本质含义

        (1)数据类型的本质就决定变量的内存占用数和内存的解析方法

        (2)所以得出结论:C语言中变量必须要有明确的数据类型,如果一个变量没有确定的类型(就是所谓的无类型)会导致编译器无法给这个变量分配内存,也无法解析这个变量对应的内存。因此不可能没有类型的变量

        (3)但是c语言可以有没有类型的内存。在内存还没有和具体的变量相绑定之前,内存就可以没有类型。实际上纯粹的类型就是没有类型的,内存只是和具体的变量关联了之后才有了确定的类型(内存本身不知道,而编译器知道,我们程序使用这个内存时知道类型所以会按照类型的含义去进行内存的读和写)

三:void类型的本质

        (1)void类型正确的含义是:不知道类型,不确定类型,还没确定类型

        (2)void a;        定义了一个void类型的变量,含义就是a是一个变量,而且a肯定有确定的类型,只是目前还不知道a的类型,还不确定,所以标记为void

四:为什么需要void类型

        (1)什么情况下需要void类型?其实就是在描述一段还没有具体使用的内存时需要使用void类型

        (2)void的类型的典型应用案例就是malloc的返回值。我们知道malloc函数向系统堆管理器申请一段内存给当前程序使用,malloc返回的是一个指针,这个指针指向申请的那段内存。malloc刚申请对的内存尚未用来存储数据,malloc无法预知这段内存会被用来存储什么类型的数据,所以malloc无法返回一个具体类型的指针,解决方法就是返回一个void *类型的指针,告诉外部我返回的是一段干净的内存,尚未确定类型。所以我们在malloc之后可以给这段内存读写任意类型的数据

        (3)void *类型的指针指向的内存是尚未确定的,因此我们后续可以使用强制类型转换将其转化为各种类型。这就是void类型的最终归宿,就是被强制类型转换为一个具体的类型

        

#include <stdio.h>int mian(void)
{//void a;                //这条表达式会报错,因为编译器无法解析变量a的数据类型int *p = (int *)malloc(sizeof(int));        //申请了一个int类型字节大小的内存空间return 0;}

        (4)void类型一般都是使用void *,而不是仅仅使用void 

相关文章:

C语言之void类型的本质

一&#xff1a;C语言属于强类型语言 &#xff08;1&#xff09;编程语言分两种&#xff1a;强类型语言和弱类型语言。强类型语言所有的变量都有自己固定的类型&#xff0c;这个类型有固定的类型占用&#xff0c;有固定的解析方法&#xff1b;弱类型语言中没有类型的概念&#x…...

Wall国内开源程序照片墙,支持VR全景及安装教程

下载 GitHub官网&#xff1a;https://github.com/zhang-tong-yao/wall 软件下载&#xff1a;https://github.com/zhang-tong-yao/wall/releases&#xff0c;推荐下载最新的版本。 演示效果 目前支持PC端和移动端自适应。 演示地址&#xff1a;https://demo-wall.ityao.cn …...

七个备受欢迎的IntelliJ IDEA实用插件

有了Lombok插件&#xff0c;IntelliJ就能完全理解Lombok注解&#xff0c;使它们能如预期般工作&#xff0c;防止出现错误&#xff0c;并改善IDE的自动完成功能。 作为IntelliJ IDEA的常用用户&#xff0c;会非常喜欢使用它&#xff0c;但我们必须承认&#xff0c;有时这个IDE&…...

HDFS架构

HDFS&#xff08;Hadoop Distributed File System&#xff09;是Apache Hadoop项目的核心组件之一&#xff0c;它是一个分布式文件系统&#xff0c;专为运行在通用硬件上的大型数据集提供高吞吐量的数据访问。HDFS的设计目标是支持大规模数据的存储和处理&#xff0c;尤其是在大…...

【机器学习】LightGBM: 优化机器学习的高效梯度提升决策树

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 LightGBM: 优化机器学习的高效梯度提升决策树引言一、LightGBM概览二、核心技术…...

【会议征稿,IEEE出版】第六届物联网、自动化和人工智能国际学术会议(IoTAAI 2024,7月26-28)

第六届物联网、自动化和人工智能国际会议&#xff08;IoTAAI 2024&#xff09;将于2024年07月26-28日在中国广州召开。 会议旨在拓展国际科技学术交流渠道&#xff0c;搭建学术资源共享平台&#xff0c;促进全球范围内的科技创新&#xff0c;提升中外学术合作。会议还鼓励不同领…...

Flask-Logging

Flask-Logging 教程 概述 flask-logging 是一个用于在 Flask 应用中实现高级日志记录功能的库。它能够帮助开发者轻松地配置和管理日志&#xff0c;适用于开发和生产环境。通过使用 flask-logging&#xff0c;可以更好地监控应用的运行状态和调试问题。 官方文档 Flask-Log…...

go匿名函数

【1】Go支持匿名函数&#xff0c;如果我们某个函数只是希望使用一次&#xff0c;可以考虑使用匿名函数 【2】匿名函数使用方式&#xff1a; &#xff08;1&#xff09;在定义匿名函数时就直接调用&#xff0c;这种方式匿名函数只能调用一次&#xff08;用的多&#xff09; &am…...

ZED双目相机环境配置

官方资料&#xff1a;stereolabs/zed-python-api: Python API for the ZED SDK (github.com) 1&#xff0c;配置ZED相机环境 1.安装CUDA 查看电脑是否安装CUDA&#xff0c;安装过程可参考以下博文&#xff1a; 如何选择匹配的CUDA版本&#xff1a;https://blog.csdn.net/iam…...

【最新鸿蒙应开发】——HarmonyOS沙箱目录

鸿蒙应用沙箱目录 1. 应用沙箱概念 应用沙箱是一种以安全防护为目的的隔离机制&#xff0c;避免数据受到恶意路径穿越访问。在这种沙箱的保护机制下&#xff0c;应用可见的目录范围即为应用沙箱目录。 对于每个应用&#xff0c;系统会在内部存储空间映射出一个专属的应用沙箱…...

SringBoot 如何使用HTTPS请求及Nginx配置Https

SringBoot 如何使用HTTPS请求及Nginx配置Https SringBoot 如何使用HTTPS请求生成证书导入证书及配制创建配置类将pfx转成.key和.pem Nginx 安装SSL依赖./configure 安装依赖编译安装完openssl后报了新错 Nginx配置 SringBoot 如何使用HTTPS请求 生成证书 由于业务数据在传输过…...

14.基于人类反馈的强化学习(RLHF)技术详解

基于人类反馈的强化学习&#xff08;RLHF&#xff09;技术详解 RLHF 技术拆解 RLHF 是一项涉及多个模型和不同训练阶段的复杂概念&#xff0c;我们按三个步骤分解&#xff1a; 预训练一个语言模型 (LM) &#xff1b;训练一个奖励模型 (Reward Model&#xff0c;RM) &#xf…...

Linux Radix tree简介

文章目录 前言一、Radix tree简介二、Operations2.1 Lookup2.2 Insertion2.3 Deletion 三、Linux内核API3.1 初始化3.2 radix_tree_insert/delete3.3 radix_tree_preload3.4 radix_tree_lookup3.5 radix_tree_tag_set3.6 radix_tree_tagged 四、address_space4.1 简介4.2 相应数…...

maven 下载jar包加载顺序

在 Maven 构建过程中&#xff0c;依赖的下载源取决于你的 pom.xml 文件中的 配置、settings.xml 文件中的 和 配置&#xff0c;以及你的 Nexus 仓库的设置。以下是决定 Maven 从哪个仓库下载依赖的关键点&#xff1a; 仓库配置优先级 项目 pom.xml 文件中的仓库配置&#xff…...

新增多种图表类型,新增视频、流媒体、跑马灯组件,DataEase开源数据可视化分析工具v2.7.0发布

2024年6月11日&#xff0c;人人可用的开源数据可视化分析工具DataEase正式发布v2.7.0版本。 这一版本的功能变动包括&#xff1a;图表方面&#xff0c;新增对称条形图、桑基图、流向地图、进度条等图表类型&#xff0c;并对已有的仪表盘、指标卡、明细表、汇总表、水波图、象限…...

supOS工业操作系统的由来

作为“世界制造工厂”&#xff0c;我国拥有最庞大、最完整的工业企业集群与产业链&#xff0c;其中既有众多全球性制造巨头&#xff0c;又有数以百万计的中小型工厂。但这些企业的制造工厂在推进数字化、网络化、智能化进程时普遍受阻&#xff1a;1&#xff09;系统软件定制程度…...

6spark期末复习

1)var a:Double5;var b:Int7;那么print(a*b) 2) var a:Int5; var bif(a>6) 7 println(b) 3)var a:Int16; var b:Int13; var cif(a>b) 5 else 7; println(c) 4. object TestDemo { print("B") def main(args: Array[String]): Unit { } } 5 def mai…...

C语言背景⾊、线条颜⾊和填充颜⾊有什么区别?何时使⽤?

一、问题 背景⾊、线条颜⾊和填充颜⾊&#xff0c;这⼏种颜⾊有什么区别&#xff1f;什么时候使⽤&#xff1f; 二、解答 背景⾊&#xff1a;是整个屏幕的底⾊&#xff0c;设置之后&#xff0c;屏幕空⽩区域都变成该颜⾊。 线条颜⾊&#xff1a;是画线时所⽤的颜⾊。⽂字输出也…...

Python 植物大战僵尸游戏【含Python源码 MX_012期】

简介&#xff1a; "植物大战僵尸"&#xff08;Plants vs. Zombies&#xff09;是一款由PopCap Games开发的流行塔防游戏&#xff0c;最初于2009年发布。游戏的概念是在僵尸入侵的情境下&#xff0c;玩家通过种植不同种类的植物来保护他们的房屋免受僵尸的侵袭。在游…...

搜索文档的好助手

搜索文档的好助手 AnyTXT SearcherEverything AnyTXT Searcher 文本内容搜索 下载&#xff1a;AnyTXT Searcher Everything 它能够基于文件名快速定文件和文件夹位置 下载&#xff1a;Everything...

如何计算 GPT 的 Tokens 数量?

基本介绍 随着人工智能大模型技术的迅速发展&#xff0c;一种创新的计费模式正在逐渐普及&#xff0c;即以“令牌”&#xff08;Token&#xff09;作为衡量使用成本的单位。那么&#xff0c;究竟什么是Token呢&#xff1f; Token 是一种将自然语言文本转化为计算机可以理解的…...

在远程服务器上安装虚拟环境

一、Anaconda环境安装 先下载Anaconda Linux版&#xff0c;并将其重命名为anaconda2020.sh wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2020.07-Linux-x86_64.sh --header"User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (K…...

《站在2024年的十字路口:计算机专业是否仍是高考生的明智之选?》

文章目录 每日一句正能量前言行业竞争现状行业饱和度和竞争激烈程度[^3^]新兴技术的影响[^3^]人才需求的变化[^3^]行业创新动态如何保持竞争力 专业与个人的匹配度判断专业所需的技术能力专业核心课程对学生的要求个人兴趣和性格特点专业对口的职业发展要求实践和经验个人价值观…...

从零手写实现 nginx-23-nginx 对于 cookie 的操作

前言 大家好&#xff0c;我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的&#xff0c;可以参考我的另一个项目&#xff1a; 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …...

Python语言例题集(015)

#!/usr/bin/python3 #使用列表模仿队列的操作。 class Queue(): def init(self): self.queue[] def enqueue(self,data):self.queue.insert(0,data)def dequeue(self):if len(self.queue):return self.queue.pop()return "队列是空的"qQueue() q.enqueue(‘Grape’…...

Halcon C++ XLD 数据写入图片

1. xld转换为Region 生成与调用函数 gen_cross_contour_xld (CrossXld, Rows, UpdateCols, 6, 0) get_xld_region (CrossXld, xldRegions)函数实现 get_xld_region * 计算XLD个数 count_obj (BaseXld, Number) * 生成空的区域&#xff08;结果&#xff09; gen_empty_region…...

一文入门vim

先来波快问快答。 第一个问题&#xff0c;vim是什么&#xff1f; vim就是一文本编辑器。 第二个问题&#xff0c;我们为什么要使用vim&#xff1f; 好像在终端中可选择使用的文本编辑器也不多&#xff08;其他有&#xff0c;但是相对而言vim用的比较广泛&#xff09; 第三…...

植物ATAC-seq文献集锦(三)——果实发育篇

ATAC-seq在植物研究领域的应用我们已经介绍2期了&#xff0c;本期我们聚焦ATAC-seq技术在果实发育方向的应用案例。 植物ATAC-seq文献集锦&#xff08;一&#xff09;——基因组篇 植物ATAC-seq文献集锦&#xff08;二&#xff09;——生长发育篇 文献一&#xff1a;Ident…...

在自己的电脑上搭建我的世界Java版服务器

很多朋友&#xff0c;喜欢玩Minecraft&#xff0c;也希望搭建一个服务器&#xff0c;用于和小伙伴联机&#xff1b; 并且&#xff0c;拥有服务器后&#xff0c;即使所有玩家都下线&#xff0c;“世界”依旧在运行&#xff0c;玩家可以随时参与其中&#xff0c;说不定一上线&am…...

1.PyQt6库和工具库QTDesigner安装

1.安装PyQT6和pyqt6-tools 1. PyQt6库是PyQt的开发库 2.pyqt6-tool时QTDesigner设计器工具支持库 pip install PyQt6 pip install pyqt6-tools 2.在Pycharm中配置外部工具QTDesigner和PYGIC 配置外部工具QTDesigner 1. QTDesigner是QT界面设计器 2.打开Pycharm->Settin…...