C语言 - void的用法解析

C语言 - void的用法解析

简介

​ void 中文翻译为"无类型",有的也叫"空类型"。常用在程序中对定义函数的参数类型、返回值、函数中指针类型进行声明。

用法

​ void应用最广泛的就是跟指针结合,即

void *		//无类型指针,也称为空指针,可以指向任何类型的数据
 			//注意一点:当我们需要使用void 类型的的指针变量区指向				某一类型的变量的时候,必须要对其进行类型转换

​ 这里补充一点:因为我们在定义一个指针变量的时候第一件事就是指定我们指针变量所指向的变量的类型。一旦被指定,我们的指针变量就只能指向这一类型的变量,即只能保存这一类变量的地址。之所以这样呢,是跟我们计算机的存储数据的形式有关,这里就不展开啦。因为我们这里要讨论的是void的用法。

​ 我们知道两个指针变量p1,p2,只有当它们类型相同的时候才能进行互相赋值。如果p1,p2指向不同的数据类型,那么他们必须进行类型转换才能相互赋值。比如:

float *p1;
int *p2;
p1 = p2;

​ 执行上面一段程序的时候我们会发现会报错,提示"cannot convert from ‘int*’ to ‘float*’",若改为

int *p1;
void *p2;
p1 = p2;

此时就不会报错,因为赋值运算符的右边进行了隐式类型转换。

​ 当然啦,void并非只能跟指针变量结合使用,void也可以用来定义一个变量。但是这样并没有意义。并且当我们进行编译的时候还会报错"illegal use of type ‘void’"。

​ void另一个重要的应用则就是跟函数进行结合主要有以下两个方面的应用。

  1. 对函数返回的限定;
  2. 对函数参数的限定;

总结

  1. 如果函数没有返回值那么应声明为void 类型

    C语言中有一个规则,凡是不加返回值限定的函数,就会被编译器作为整型值处理。但是许多人却误以为其为void类型。

    因为C语言不想C++那样有很严格的类型安全检查。所以为了避免混,对于任何函数必须制定其返回值类型。如果函数没有返回值一定要声明为void类型。这样既可避免混淆也方便自己和别人查看我们的代码。

  2. 如果函数无参数,那么应该声明其参数为void

    如果我们所写的函数不接受任何参数,那么一定要指明其参数为void。

  3. 如果函数的参数可以是任意类型指针,那么应声明其参数为void

    这里有两个很经典的内存处理函数,在驱动中应用很广泛。

    void *memcpy(void *dest,const void *src,size_t len);
    void memset(void *buffer,int c , size_t num);
    

    可以看到我们用void 来修饰了函数参数类型,即我么可以传任意类型指针。这也体现内存操作函数的意义,因为它操作的对象仅仅是一片内存,而不论这片内存存储的数据是什么类型。

  4. 使用void类型指针时应该注意

    按照C标准规定,我们不能对void型 指针进行算法。对有类型的指针进行算法操作的时候我们知道,因为其有具体所指向的类型,所以其的算法是其所指向的数据类型为单位进行的。而void为空或者说无类型,所以就无法对其进行算法运算。

  5. void 不能代表一个真实的数据类型

    这个前面提到过,因为void在C语言中解释为空,或者无类型,所以它当然无法代表一个真实的数据类型了。不过我们可以对其进行类型转换,这样它又可以变成各种各样的数据类型,所以我们可以将其理解成一个"抽象数据类型"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章