C语言void关键字为什么不能定义变量?原来它只能这么用!

今天我们来说一个内容,就是void这个关键字,这个的字面意思是 无类型,void* 则为无类型指针。

C语言volatile修饰的到底什么鬼?原来它在嵌入式开发是必须掌握的!

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

原因是什么,网上没讲。网上只会说这个没有什么意义,其实我们直接分析就能得出结论,我们来看下:

int a;

double a;

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

那么它存在的意义在哪里呢?如果我们函数不需要参数,怎么让编译器知道,就是用void,

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

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

那么它的第二个作用,才是巨大的,我们经常使用申请内存,malloc,我们去看看它的原型:void *malloc(size_t size),这里返回结果是个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不能定义一个变量,因为大小未知

好了,今天就分享到这里,下一节我们来说下在C语言编程,工程里面的一个灵魂玩法,就是# ##,这两个预处理符号,很多人会用这个,来实现C++的父类,继承,和多态。我们慢慢来说~~

喜欢,帮忙转发~~

~~ end not end ~~

热门文章

零基础新手自学Python编程教程入门精通学习资料网站大全

自学编程C语言不迷路,我私藏的书单分享给你!

零基础新手学习算法Leetcode刷题指南

程序员码农IT工程师自学编程计算机入门进阶学习网站大全

程序员面试题宝典以及相关书籍下载!

计算机类常用电子书整理大全

职场老鸟,互联网十年从业生涯,分享 [Java,Python,安卓,AI,爬虫] 技术文章,学习资料, 热点趣闻等。关注回复 1024 Python 电子书大全 面试资料,给你一份私藏的程序员好礼,永远更新中!赶紧来关注哦!

我的微信 code_gg_boy 。

### 回答1: 外部变量定义在文件外部(非函数内部)的变量。它们可以被多个文件中的函数访问和修改。 在 C 语言中定义外部变量的方式是在文件的顶部(非函数内部)添加变量的声明,并在其他文件中通过 extern 关键字来引用它。例如,在文件1中定义外部变量x: ``` int x; ``` 在文件2中引用这个变量x: ``` extern int x; ``` ### 回答2: C语言中,外部变量是指在一个函数之外定义变量,它的作用域从定义处开始,到文件的结尾为止。外部变量可以在整个C程序中被访问和使用,具有全局的范围和生命周期。 外部变量的意义在于: 1. 数据共享:外部变量可以在不同的函数之间共享数据,避免了函数之间传递参数的复杂性和开销。 2. 面向对象的模块化编程:外部变量可以作为不同模块之间交流和协作的桥梁,方便模块之间的数据传递和共享。 3. 简化代码结构:外部变量可以减少函数内部的参数传递,简化函数的接口和实现,提高代码的可读性。 在C程序中定义外部变量时,需要将变量的声明放置在函数之外、程序的顶部。例如: ```c #include <stdio.h> int globalVariable; // 定义了一个外部变量globalVariable int main() { globalVariable = 10; // 可以在函数中直接使用外部变量 printf("%d", globalVariable); return 0; } ``` 在其他函数中使用外部变量时,不需要再次进行声明,只需要直接使用即可。如果在其他函数中需要修改外部变量的值,同样不需要进行声明,直接赋值即可。 需要注意的是,为了安全起见,尽量避免过多使用外部变量,因为它们可能会导致代码的可读性和维护性降低。合理使用外部变量能够提高代码的灵活性和可扩展性,但也需要谨慎使用,遵循良好的编程习惯。 ### 回答3: C语言中的外部变量具有全局作用域,可以被程序中的多个函数共享和访问,有以下几个意义: 1. 数据共享:外部变量可以在程序的多个函数中被访问和修改,实现数据在不同函数之间的共享。 2. 提高代码复用性:通过使用外部变量,可以将需要在多个函数中使用的数据定义为外部变量,避免了重复定义和传递数据的麻烦。 3. 灵活性:外部变量可以在任意的函数中定义和修改,可以方便地在函数之外对其进行操作。 在C程序中定义外部变量有以下几种方法: 1. 在函数之外定义:在所有函数之外定义一个变量,它就成为了外部变量,可以被所有函数访问。例如: ``` int count; // 外部变量定义 ``` 2. 使用关键字extern:在函数之外声明一个外部变量,然后在其他函数中使用关键字extern来引用该变量。例如: ``` extern int count; // 外部变量声明 void func() { count = 10; // 使用外部变量 } ``` 3. 使用头文件:将外部变量定义放在一个头文件中,然后在需要使用该变量的函数中包含这个头文件即可。通过这种方式,可以在多个源文件中共享外部变量。 需要注意的是,为了避免重复定义,外部变量定义只能在一个源文件中进行,而其他源文件中只能使用extern关键字来声明该变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员入门进阶(免费辅导开题报告)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值