C语言中的void的理解

C语言中的void的理解1初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。2.void的含义void的字面意思是“无类型”,void*则为“无类型指针”,void*可以指向任何类型的数据。void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,

大家好,又见面了,我是你们的朋友全栈君。1 初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并

详述void及void指针类型的使用方法与技巧。

2.void的含义

void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。

void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:

void a;

这行语句编译时会出错,提示“illegal use of type ‘void’”。不过,即使void a的编译不会出错,它也没有任何实际意义。

void真正发挥的作用在于:

(1) 对函数返回的限定;

(2) 对函数参数的限定。

我们将在第三节对以上二点进行具体说明。

众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用强制类型

转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。

例如:

float *p1;

int *p2;

p1 = p2;

其中p1 = p2语句会编译出错,提示“’=’ : cannot convert from ‘int *’ to ‘float *’”,必须改为:

p1 = (float *)p2;

而void *则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换:

void *p1;

int *p2;

p1 = p2;

但这并不意味着,void *也可以无需强制类型转换地赋给其它类型的指针。因为“无类型”可以包容“有类型”,而“有类型”则不能包

容“无类型”。道理很简单,我们可以说“男人和女人都是人”,但不能说“人是男人”或者“人是女人”。下面的语句编译出错:

void *p1;

int *p2;

p2 = p1;

提示“’=’ : cannot convert from ‘void *’ to ‘int *’”。

3.void的使用

下面给出void关键字的使用规则:

规则一 如果函数没有返回值,那么应声明为void类型

在C语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。但是许多程序员却误以为其为void类型。例如:

add ( int a, int b )

{

return a + b;

}

int main(int argc, char* argv[])

{

printf ( “2 + 3 = %d”, add ( 2, 3) );

}

程序运行的结果为输出:

2 + 3 = 5

这说明不加返回值说明的函数的确为int函数。

补充:void 中文翻译为”无类型”。常用在程序编写中对定义函数的参数类型、返回值、函数中指针类型进行声明。

void的字面意思是”无类型”,void *则为”无类型指针”,void *可以指向任何类型的数据。

在C语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。但是许多程序员却误以为其为void类型。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144933.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 软件使用&vmware虚拟机的安装步骤详细[通俗易懂]

    实验环境:Windows+Vmware12+RHEL7.2+Xshell5准备工作:1.关闭并退出360,电脑管家等优化软件,防止虚拟机运行出现问题。2.打开链接http://www.vmware.com/cn/products/workstation/workstation-evaluation下载试用版3.安装该软件,可以指定将来虚拟机存放的目录,其他随意。打开vmwar…

    2022年4月12日
    50
  • JAVA CAS实现原理与使用

    JAVA CAS实现原理与使用在JDK5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁)。锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile…

    2022年7月8日
    36
  • pycharm默认主题_pycharm主题插件

    pycharm默认主题_pycharm主题插件一、Pycharm基本设置(小白篇)1、打开Pycharm设置,【File】-【Settings】2、设置解释器,【File】-【Settings】-【Project:项目名字】-【ProjectInterpreter】-【设置图标】-【Add】-【浏览到目标解释器】,选择相应解释器即可。3、设置pycharm主题,【File】-【Settings】-【Appearance&Behavior】-【Appearance】;Theme:修改主题、Usecustomf

    2022年8月26日
    3
  • java datagramsocket,Java DatagramSocket和DatagramPacket[通俗易懂]

    java datagramsocket,Java DatagramSocket和DatagramPacket[通俗易懂]JavaDatagramSocket和DatagramPacket1JavaDatagramSocket和DatagramPacketJavaDatagramSocket和DatagramPacket类用于无连接Socket编程。2JavaDatagramSocket类JavaDatagramSocket类表示用于发送和接收数据报包的无连接Socket。DatagramSocket基…

    2022年6月12日
    31
  • 升级、备份红帽PaaS openshift 上的 wordpress

    升级、备份红帽PaaS openshift 上的 wordpress

    2021年11月16日
    102
  • init是啥意思_init 0到6的意思

    init是啥意思_init 0到6的意思1.内核启动问题2.解决方案2.1ramdisk(比如initrd)2.2tmpfs(比如initramfs)2.3ramdiskvsramfs2.4临时文件系统2.4.1观察tmpfs2.4.2Initramfs2.4.3查看initramfs2.4.4创建initramfs2.5Linux系统中的initramfs2.6cpio归档文件3.高级用户3.1制…

    2022年8月11日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号