void与指针
void的含义
void 即“无类型”, void * 则为“无类型指针”,可以指向任何数据类型。
void指针使用规范
①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对 void指针赋值。例如:
int *pint;
void *pvoid;
pvoid = pint; /* 不过不能 pint = pvoid; */
如果要将pvoid赋给其他类型指针,则需要强制类型转换如:pint = (int *)pvoid;
②在ANSI C标准中,不允许对void指针进行算术运算如pvoid++或 pvoid+=1等,而在GNU中则允许,因为在缺省情况下,GNU认为
void *与char *一样。sizeof( pvoid )== sizeof( char ) .
void的作用
- ①对函数返回的限定。
- ②对函数参数的限定。
- 当函数不需要返回值时,必须使用void限定。例如: void func(int, int);
- 当函数不允许接受参数时,必须使用void限定。例如: int func(void)。
由于void指针可以指向任意类型的数据,亦即可用任意数据类型的指 针对void指针赋值,因此还可以用void指针来作为函数形参,这样函 数就可以接受任意数据类型的指针作为参数。例如:
void * memcpy( void *dest, const void *src, size_t len );
void * memset( void * buffer, int c, size_t num );
函数和void
void (*fp)(void); 定义 fp 函数指针, 该指针指向函数类型为 参数void(无参),返回类型为 void,即无返回值; void *fp(void); 定义 一个函数 fp, 该函数参数void (无参),返回类型为 void *
#include <stdio.h>
void print(void)
{
printf( "Hello, this is a test!\n ");
}
int main()
{
void (*fp)(void);
fp=print; //给函数指针赋值
fp(); //调用 指针指向的函数~
getchar();
return 0;
}
