IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> void是什么?关键词?变量?(待完善) -> 正文阅读

[嵌入式]void是什么?关键词?变量?(待完善)

首先,知道什么是关键词?

C语言关键字_百度百科 (baidu.com)https://baike.baidu.com/item/C%E8%AF%AD%E8%A8%80%E5%85%B3%E9%94%AE%E5%AD%97void 是一个关键字也是一个变量,void 的字面意思是无类型,void* 则为无类型指针。

一、问题引出

(一)void 定义变量

而我们不能写void a;去定义一个变量a,编译会报错:

网络上都说这样用是没有什么意义,编译器不允许。

(二)int和double定义变量

int a;

double a;

二、自问自答

问①:这两个为什么能定义?

答:其实原因在于int double 都有大小,也就是sizeof(type) 是能求出值的,所以就可以定义,而sizeof(void)是没法求出值的,所以没法用。

问②:那么它存在的意义在哪里呢?

答:如果我们函数不需要参数,怎么让编译器知道,就是用void,

????????比如 show(void);而如果我们不需要返回结果,就是 void show(void);

????????这样子编译器就知道,不需要为其处理参数,返回结果。这是它的第一个用法,就是代

????????表不需要参数,不需要返回结果。

问③:那么它的第二个作用,才是巨大的,我们经常使用申请内存,malloc,我们去看看它的原型:void *malloc(size_t size),这里返回结果是个void*,为什么?

答:

因为我们申请空间回来,具体怎么用这段内存,是由我们自己决定,所以返回的类型,这个函数确定不了,所以就出现了void*,

再问:而为什么这个可以编译通过呢?不是void定义的变量都没有意义吗?

再答:

根据我们前面说的,sizeof(void*),是可以求出来结果的。我们发现sizeof(int*),sizeof(double *),sizeof(void*)的大小是一样的,原因很简单,这个是一个指针,指针里面存储的是一个地址,而地址只跟我们的寻址总线有关,比如32位的地址总线,就是占32位,默认来说,地址的大小,跟sizeof(int)是一致的,系统默认遵循,int的占用空间,跟地址总线一致。

所以,void* 是可以算出来大小的,也就是可以预知,有确定的大小和结果,于是就是可以去用的。我们常常把这个喊做万能指针,主要是因为,它可以随意的转换(当然你要明确知道你解析的是什么,否则会出现意外结果)

我们写一段代码:

我们在使用的时候,先将p转成对应的指针类型,再去读取值。为什么呢?因为我们真正要获取数据的时候,是需要知道它的大小的,否则编译器不知道该怎么拿数据。

三、总结void的用法

1 不需要参数时候,应该声明参数为void

2 不需要返回值,应该声明为void类型

3 void*指针默认不能++,原因是指向的void类型不知大小

4 如果返回需要任意类型指针,声明类型为void*

5 void不能定义一个变量,因为大小未知

四、一点思考

void不能代表一个真实的变量。下面代码都企图让void代表一个真实的变量,因此都是错误的代码:

void a; //错误

function(void a); //错误

(1)void体现了一种抽象,像是一种哲学,这个世界上的变量都是 " 有类型的?" 。那么," 无类型 " 怎么体现,我们就用 void 来描述。世界上的东西都可以直观看出来,但也会有那么些东西不能直观看出来。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 20:51:47  更:2022-02-09 20:52:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:45:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码