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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 纸的大小图解_常用纸张尺寸及示意图(A0,A1A3,A4,A5A8)数据源维基百科.PDF

    纸的大小图解_常用纸张尺寸及示意图(A0,A1A3,A4,A5A8)数据源维基百科.PDF常用纸张尺寸及示意图(A0,A1A3,A4,A5A8)数据源维基百科mFPCharging-常用纸张尺寸说明2011-12-09v2.0常用纸张尺寸及示意图(A0,A1…A3,A4,A5…A8)数据源:维基百科标准定义ISO216定义了A、B、C三个系列的纸张尺寸。C系列纸张尺寸主要使用于信封。ISO216的格式遵循着的比率;放在一起的两张纸有着…

    2022年6月20日
    66
  • Linux 简单查看网卡实时网速

    Linux 简单查看网卡实时网速简单粗暴⛽️1.nload查看sudonloadnload展示效果退出查看:按q键2.通过ifconfig实时查看watch-n1″/sbin/ifconfigeth0|grepbytes”ifconfig实时查看效果RX:接收流量TX:发送流量计算方法:(KB=数值/1000)(MB=数值/100000)退出查看:按ctrl+c键……

    2022年10月18日
    4
  • httpclient4.x访问https[通俗易懂]

    httpclient4.x访问https[通俗易懂]https有单向认证和双向认证之分,单向认证即客户端只会认证服务端,双向认证是客户端需要认证服务端,服务端也需要认证客户端。先说单向认证,浏览器访问服务端,服务端接收请求,会把证书(包含密钥和其他信息)和加密后响应返回给浏览器。如果这个证书不是向第三方权威机构申请的,浏览器会提示证书有问题(使用httpclient访问的话会报错)。如果忽略错误,则浏览器接受证书并解密响应,发送的数据也用此密钥

    2022年7月22日
    11
  • Java中.next()和.nextLine()的区别「建议收藏」

    Java中.next()和.nextLine()的区别「建议收藏」nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。next()会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。(简单点说,next我只要字,nextLine我啥都要)[java] viewplain copypackage test;    import java.util.Scanner;      public class Sub…

    2022年6月13日
    40
  • matlab griddata nan,请教Matlab的griddata的用法

    matlab griddata nan,请教Matlab的griddata的用法请教Matlab的griddata的用法以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!请教Matlab的griddata的用法MATLAB散乱点插值函式griddata函式语法:ZI=griddata(x,y,z,XI,YI)[XI,YI,ZI]=griddata(x,y,z,XI,YI)[…]=gri…

    2022年5月9日
    39
  • word打开错误解决方法小笔记

    word打开错误解决方法小笔记

    2021年7月26日
    65

发表回复

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

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