c语言创建函数时void *与 void做修饰符的区别

来源:互联网 发布:观看农村淘宝的感想 编辑:程序博客网 时间:2024/06/16 04:12
#include <stdio.h>
#include <stdlib.h>#include <string.h>void fun1(){    printf(" void fun , no return\n");}void fun2(){    printf(" void fun , has return\n");    return;}void  *fun(){    printf(" void pointer fun , has return\n");    return NULL;}int main(int argc, char* argv[]){    fun1();    fun2();    void *(*ptr)()=fun;    void *execu=ptr();    return 0;}
关于函数类型修饰符的理解:
1,所有函数都是要返回的。有的函数返回时需要某些携带固定的类型的数值,叫做有返回值函数。有些函数返回时不需要携带数值,叫做无返回值函数。
2,void修饰的函数代表无类型--无类型不是无返回。无返回的字面意思是没有返回,而事实上是没有无返回的函数(只有无返回值的函数)。
3,函数前面的类型修饰符,是修饰函数返回类型的。没有返回值的函数,用来修饰返回值的部分当然是无类型(因为它根本就没有返回值,没有任何类型)。
4,对于c/c++,函数的定义和声明必须要携带返回值修饰符,即使它根本没有。
综上:用void 修饰的函数,是因为没有返回值,而又因为语法需要必须携带返回值修饰符,所以它的返回值修饰符用void。
对于 void *函数:
它已经变成了有返回值的函数,就想 int ,char, char *等等函数一样。只是因为它的返回类型比较奇特,很多时候,这是因为我们在定义函数的时候既不知道它的返回类型是什么,也不知道它需要返回多少个数值。
所以我们把返回值定义成 void *。这是一个指针,它指向一个我们可控的地址,在需要的时候,我们可以根据需要把它的内容转换成我们需要的形式。
返回值的理解:
有返回值的函数,我们在返回的时候,必须显式的写出返回数据。所以,一个void *函数,它需要返回一个void *型指针。如果需要携带数据,它会指向一个我们准备返回的数据地址。
如果一个函数,我们定义了返回类型是void *,但是又不需要返回数据时,可以简单的用 return NULL。这不是无返回,而是我们返回了一个没有携带数据的空指针。
没有返回值的函数,我们需要在函数结束时写 return; 当然也可以不写。如果我们不写,不是它不返回了,而是在编译时,计算机会帮我们加上这句话。
 
原创粉丝点击