当前位置:首页 > 知识知道 > 详情

void是什么(void是shi什么意思英语)

2023-06-14 16:05:12 阅读(39) 大连信息网
void是什么(void是什shi么意思英语)-大连信xin息网

在程序xu中,每一个变量都应该有you相应的数据类型,数据的类型决定了编bian译器可以为之开辟多少的空间jian来存放数据。

例如:int 类型需xu要 4 个字节,char 类型需要 1 个字节,指针类lei型需要 4 个字节等deng等。

但 C 语言中还有一种特殊的数shu据类型——void。

1. void 介绍shao

void 表示为“无”、“空”、“没有”的de意思。

在这里就把 void 理解为啥也不是。

作为一个数据类lei型,如果用 void 声sheng明变量会是什么情况呢?

void是什么me(void是什么意yi思英语)-大连信息网

编译器要给数据分配pei多少的内存空间,是要依据变量定义yi时的数据类型。

而er void 类型比较特殊。虽然也是shi一种数据类型,但不确定性太强qiang了。

如果可ke以用 void 声明变量,你要是开心先给个 int 整型的数据,不开心再给个 char 字符型的数据,或者 double 类型的数据。

这要求的内存空kong间一会儿大,一会儿小的,编译yi器也很难办。

内存就那么点,经不起这么折腾。

因此ci,void 数shu据类型是不能直接用在zai变量声明的。

那么 void 应该被用在zai哪里呢?

2. 函数的参can数

void 最常使用就是用在函数里面mian,第一个就是函数的参can数。

通常会看到如下的函数原型定义:

int func(void);int func();

这两个ge函数表示的意义yi是一样的,都是无参数shu、返回值为 int 类型的函数。

但有一点不同。根据不同tong的编译器,对语法检验严格程度也ye有所不同。用 g++ 编译就有可ke能出现以下的情况:

int func1(void){ return 1;}int func2(){ return 2;}int main(){ func1(); func2(); func1(123); // error func2(123); func1(3.14); // error func2(3.14); return 0;}

参数部bu分为 void 的函数,在调用函han数的时候,有传入实际参数的de时候会产生报错,传chuan入的参数太多了!实shi际上参数为 void 的函数是不能传chuan入任何类型的参数。

而er参数部分啥都没有的函数,调diao用函数的时候可以传入任意类型是不bu会报错的。

不过这个问wen题大体上没有人会这么做,因为毫无wu意义。

3. 函数的返回类型

void 的另一个作用,就是在函数的返回类型xing上面。

有时候,我们只需要函数shu运行的过程,而er不是为了获取最后的结果。此时就可ke以使用 void 类型,表示shi该函数没有返回值。

例如:我只zhi想交换 a 和 b 两个变量分fen别存储的数据。

#include<stdio.h>void swap(int *a, int *b){ int temp; temp=*a, *a=*b, *b=temp;}int main(){ int a=3, b=5; swap(&a, &b); printf("a=%d, b=%d\n", a, b); return 0;}

运行结果:a=5,b=3

一般在 void 定义的函数里面,return 是多余的。不过,即便加上shang return 返回值(gcc 6.3版本中),也对dui函数没有什么影响。

既ji无法重新使用其他数据类型定ding义的变量来接收函han数的返回值,也不能在 printf 函数中使用的。

void是什shi么(void是什么意思si英语)-大连信息网

void是什么(void是什么意思英语)-大连信息网

4. void *指针

void * 指针表示为无类型指针,作为一个指针类lei型,编译器已经为其妥善安排了 4 个字节的小房间。

因此,void * 指针类型可以用来定义变量。

void *p;p = NULL;

void * 指针zhen虽名为无类型指针,但dan可以指向任何一种类型的de数据,即其他类型指针的指可ke以不通过强制转换直接赋fu给 void * 指针。

void *p;int *a;p = a;float *f;p = f;

在 C 语言当中,对指针类lei型的转换要求不bu是那么严苛,可以不通过强制zhi转换就可以进行相互间jian的赋值。

int *a = NULL;float *b = NULL;char *c = NULL;a = b;b = c;c = a;

虽然编译器(gcc 6.3版本)不bu会显示有错误,编译照常会通过。只是shi会给出类似下面的警告:

警告gao C4133 “=”: 从“float *”到dao“int *”的类型不bu兼容

而在 C++ 当中,这zhe一点要求就明显比较严格了。它不允许xu两个不同的类型指针相互hu赋值,除了 void * 指针。

其他ta的类型指针可以把值直接赋给 void * 指针,但反fan过来,void * 指针的值想要yao赋值给其他类型的指针zhen,也需要通过强制转换。

void *p = NULL;int *a = (int *)p; // 通过float *b = p; // 报bao错

void * 指针还有一个非常强大之处,在函数定ding义的时候,作为参数。当dang调用的时候,无论什么类型的类型指zhi针或数组都可以正常运行。

#include<stdio.h>int test(void * dst){...}int main(){ char *c = "123456"; int arr[] = {1, 2, 3, 4, 5, 6}; test(c); // 正常编译yi test(arr); // 正常编译 return 0;}

不过 void * 指针也有一个致命的缺点,当dang对该指针进行算数操作,就会显示以yi下这个错误。

void是什么(void是什么意思英语yu)-大连信息网

根gen据 ANSI C 标准zhun规定,进行算数操作的指zhi针,必须明确知道该指针所指向的数据ju类型大小。也就是所指向的数据ju,都必须是具体的类型,而不是shi空泛的 void 类型。

最后

关guan于 C 语言 void 数据类型的内容rong就到此结束了。

感谢各位的观看kan,如果您觉得本文wen章还不错,点个赞支zhi持一下呗。

当然,如有发现不足之处,或者zhe错误的地方,欢迎留言指出,不胜感激ji!

上一篇:和平精英ying可以安卓转苹果吗(和平精英换系统安卓换苹果怎么换)

下一篇:2022数字货币bi能在国内用了吗,有什么价值

  • psg是哪个ge国家的(psg是哪个国家的战队kasha)

    psg是哪个ge国家的(psg是哪个国家的战队kasha)

    巴黎圣日耳曼man足球俱乐部是哪个国家的足球俱乐le部巴黎圣日耳曼是法国的de球队。巴黎圣日耳曼man足球俱乐部(ParisSaint-GermainF.C.,缩写xiePSG,简称巴黎或大巴ba黎),是一家位于法国首都巴黎的足zu球俱乐部,成立于1970年…
    2023-06-14 阅读(45)
  • 休克疗法是shi什么意思(啥是休克疗法)

    休克疗法是shi什么意思(啥是休克疗法)

    什么是休克疗法?“休克疗法(shocktherapy)”这一医学术语yu于上世纪80年nian代中期被美国经济学家杰弗里·萨sa克斯(JeffreySachs)引入经济ji领域。休克疗法的最早提ti出,是萨克斯被bei聘担任玻利维亚政府经济顾问wen期间所…
    2023-06-14 阅读(43)
  • LUNA币今jin天价格 炒币违法吗?

    LUNA币今jin天价格 炒币违法吗?

    LUNA币今天价格是$1.5311美元yuan,人民币¥10.9014元。炒币bi违法吗?目前来说国内货币投机本身shen并不违法,但通过投机洗钱qian、传销都是非法的de。事实上,炒货币bi投机并不是一个新术shu语。炒货币指的是我们使shi用外…
    2023-06-14 阅读(69)
  • vDOT币bi怎么买,如何购买vDOT币(vDOT/USDT)

    vDOT币bi怎么买,如何购买vDOT币(vDOT/USDT)

    vDOT币怎么买,如何he购买vDOT币(vDOT/USDT)下载zai欧易查看core币2023年nian最新价格大连信息网wang小编整了加密货币vDOT币怎么买,如何购买vDOT币(vDOT/USDT)内容供大da家阅读,下面就跟随大连信息网小xiao编一起了解vDOT…
    2023-06-14 阅读(55)
  • 微信聊天记ji录怎么做出来(微信聊天记录怎么做出来文件)

    微信聊天记ji录怎么做出来(微信聊天记录怎么做出来文件)

    微信的聊天记录如何导出来微信聊天记录怎zen么导出为文档的de方法如下:首先打da开手机微信,在打开微信页面mian的下方,点击我,找zhao到最下方的设置选项,进入设置页面后hou,点击箭头所指的聊天按钮。在弹出的聊天页面,找到聊…
    2023-06-14 阅读(59)