1.void函数怎么用
void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。void只有“注释”和限制程序的作用。void的作用在于对函数返回的限定和对函数参数的限定。
例如: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类型在c开发中常见的用法有2种:
1、作为函数的返回值,如void add(int x,int y); 表示该函数吴返回类型,不需要返回值。
2、使用void*指针来使用,比如作为函数的参数类型,如: int max(void* param); -->;此时的void*表示可以使用任何类型的参数进行转换。如
int a = 10; //普通类型
max((int)&a);
typedef struct{int a;}str; //结构体
str S1 ;
S1.a = 2;
max((str)&S1);
2.void+函数的使用方法
void+函数的使用方法:
1.void *可以指向任何类型的数据
2. void真正发挥的作用在于:
(1) 对函数返回的限定;
(2) 对函数参数的限定。
例如:
void *p1;
int *p2;
p1 = p2;
3.void的使用:
规则一
如果函数没有返回值,那么应声明为void类型。
规则二
如果函数无参数,那么应声明其参数为void。
规则三
小心使用void指针类型。
按照ANSI(American National Standards Institute)标准,不能对void指针进行算法操作,即下列操作都是不合法的:
void * pvoid;
pvoid++; //ANSI:错误
pvoid += 1; //ANSI:错误
//ANSI标准之所以这样认定,是因为它坚持:进行算法操作的指针必须是确定知道其指向数据类型大小的。
//例如:
int *pint;
pint++; //ANSI:正确
pint++的结果是使其增大sizeof(int)。( 在VC6.0上测试是sizeof(int)的倍数)
但GNU(GNU's Not Unix的缩写)则不这么认定,它指定void *的算法操作与char *一致。
因此下列语句在GNU编译器中皆正确:
pvoid++; //GNU:正确
pvoid += 1; //GNU:正确
pvoid++的执行结果是其增大了1。( 在VC6.0上测试是sizeof(int)的倍数)
在实际的程序设计中,为迎合ANSI标准,并提高程序的可移植性,可以这样编写实现同样功能的代码:
void * pvoid;
(char *)pvoid++; //ANSI:正确;GNU:正确
(char *)pvoid += 1; //ANSI:错误;GNU:正确
GNU和ANSI还有一些区别,总体而言,GNU较ANSI更“开放”,提供了对更多语法的支持。但是我们在真实设计时,还是应该尽可能地迎合ANSI标准。
规则四
如果函数的参数可以是任意类型指针,那么应声明其参数为void *
典型的如内存操作函数memcpy和memset的函数原型分别为:
void * memcpy(void *dest, const void *src, size_t len);
void * memset ( void * buffer, int c, size_t num );
规则五
void不能代表一个真实的变量
下面代码都企图让void代表一个真实的变量,因此都是错误的代码:
void a; //错误
function(void a); //错误
3.c语言里如何调用void函数
void是是C语言的一个关键字,其含义为空。
在C语言中,单独的void有两种用途,均用于函数中。 1 用于函数返回值。
形式为 void func_name(。); 代表函数没有返回值。
在这样的函数中,调用return语句时,不需要也不可以有参数。注意,写成 func_nmae(。
); 的形式,在部分编译器中可以编译成功,但并不是没有返回值,而是有一个默认的整型(int)返回值的意思。 2 用于函数参数列表。
当函数没有参数时,需要定义为 xxx func_name(void); 的形式,表示本函数不需要任何参数。注意,如果写成 xxx func_name(); 的形式,与void不同,不是没有参数,而是函数参数不定,可以接收任何长度的参数。