当前位置: 首页 > 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 

http://www.lryc.cn/news/372893.html

相关文章:

  • Wall国内开源程序照片墙,支持VR全景及安装教程
  • 七个备受欢迎的IntelliJ IDEA实用插件
  • HDFS架构
  • 【机器学习】LightGBM: 优化机器学习的高效梯度提升决策树
  • 【会议征稿,IEEE出版】第六届物联网、自动化和人工智能国际学术会议(IoTAAI 2024,7月26-28)
  • Flask-Logging
  • go匿名函数
  • ZED双目相机环境配置
  • 【最新鸿蒙应开发】——HarmonyOS沙箱目录
  • SringBoot 如何使用HTTPS请求及Nginx配置Https
  • 14.基于人类反馈的强化学习(RLHF)技术详解
  • Linux Radix tree简介
  • maven 下载jar包加载顺序
  • 新增多种图表类型,新增视频、流媒体、跑马灯组件,DataEase开源数据可视化分析工具v2.7.0发布
  • supOS工业操作系统的由来
  • 6spark期末复习
  • C语言背景⾊、线条颜⾊和填充颜⾊有什么区别?何时使⽤?
  • Python 植物大战僵尸游戏【含Python源码 MX_012期】
  • 搜索文档的好助手
  • 如何计算 GPT 的 Tokens 数量?
  • 在远程服务器上安装虚拟环境
  • 《站在2024年的十字路口:计算机专业是否仍是高考生的明智之选?》
  • 从零手写实现 nginx-23-nginx 对于 cookie 的操作
  • Python语言例题集(015)
  • Halcon C++ XLD 数据写入图片
  • 一文入门vim
  • 植物ATAC-seq文献集锦(三)——果实发育篇
  • 在自己的电脑上搭建我的世界Java版服务器
  • 1.PyQt6库和工具库QTDesigner安装
  • Hbase搭建教程