void类型及void指针

void类型及void指针void 类型及 void 指针基于前面的一篇博客模拟实现 memcpy 和 memmove 时用到的 void 指针展开关于 void 和 void 指针的概述 1void 类型 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 1 void 相信大家不会陌生 经常定义无返回值的函数是用 void 定义 表示函数无需返回值 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp voidfun void

void类型及void指针

基于前面的一篇博客模拟实现 memcpy memmove 时用到的void* 指针展开关于 void void* 指针的概述;

1>void 类型

             
1.void 相信大家不会陌生,经常定义无返回值的函数是用 void 定义,表示函数无需返回值;
              
void fun(void) { ; }
           
 2. void 的字面意思是 “无类型”,  void 可以定义变量 ,但是相信应该没人会去这样定义,因为没有任何人意义,


       并且大多数编译器都会报错。例:

void类型及void指针
.        
3.这里还有一个误区,有些时候程序员会没有写出函数的返回值类型,在C语言中,凡是没有加返回值类型限制的


函数都会被编译器作为返回整形值处理,大多数程序员可能会认为是 void 型;


fun(void) { return 0; }


.


       在上面这段代码里,fun函数无参数,一般我们都会直接写个 () 里面什么都不会写,作为一个良好的编程习惯,



       一般函数无参,则默认为void;如果函数的参数可以是任意类型的指针,你那么应该声明为 void*;



       这里既可以引出我们接下来要讲的  void*  指针!


        4.void 真正发挥的作用:

                              (1)对函数返回的限定
                              (2)对函数参数的限定

 2>void*指针

               1. 平时我们所熟知的指针类型都 int*  ,char*,而void*可以指向任何类型的数据,包括’\0′;这就是实现

               memcpy和memmove时使用void*的原因;void*就是“无类型的指针”;

               2.   平时我们将指针 p1 赋值给 指针 p2 时需要判断指针类型是否一致,否则将会出错,如果不一致则需要强

               制类型转换;例:   

.        

int *p1; char *p2; p1 = (int*)p2;

         当然这样的定义指针而不初始化是有问题的,只是为了举例方便,大家自己写的时候要注意野指针的问题;

          而void*则可以随意的接收任何类型的指针,但是其他类型的指针不能随意接收void *的指针,这就是前面说到

的void*是个无类型的的指针,所以它所指向的内容类型是不确定的;

          但是这并不意味其他类型的指针无法接受void * 指针,我们不是还有强制类型转换嘛!



void* fun(void* p,void *q) { char *s1 = (char *)p; int *s2 = (int *)q; }

.           

  “无类型可以包容有类型,而有类型不能包容无类型”,这是引用大牛总结的话,相信我举的例子已经把这句话

诠释了!

             3.关于函数无返回值时定义为void 还需强调一下,其实C语言有很严格的类型检查,不会允许函数不加类型声

明的情况发生的, 但是编译器并不是这么严格!   所以函数无返回值时一定要加void 声明;

            以上是我现在对void 的理解,比较片面,以后会多加补充。

            谢谢!

     
















































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

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

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


相关推荐

发表回复

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

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