void指针:
void指针一般被称为通用指针或泛指针,它是C语言关于"纯粹地址“的一种约定。void指针指向某个对象,但该对象不属于任何类型。请看下例。
int * ip; void *p; 在上例中,ip指向一个整型值,而p指向的对象不属于任何类型。 在C语言中,任何时候都可以用其他类型的指针来代替void指针,或者用void指针来代替其他类型的指针,并且不需要进行强制转换。例如,可以把char*类型的指针传递给需要void指针的函数。 当进行纯粹的内存操作时,或者传递一个指向未定类型的指针时,可以使用void指针。void指针也经常用作函数指针。 有些C代码只进行纯粹的内存操作。在较早版本的C语言程序中,这一点是通过字符指针"char*"实现的,但是这容易产生混淆,因为人们不容易判定一个字符指针究竟是指向一 个字符串,还是指向一个字符数组,或者仅仅是指向内存中的某个地址。例如,strcpyo函数将一个字符串复制到另一个字符串中,Slcpyo函数将一个字符串中的部分内容复制到另一个字符串中。
char *strcpy(char'strl,const char *str2); char *strncpy(char *strl, const char*str2, siz.e_t n); memcpyo函数将内存中的数据从一个位置复制到另一个位置。 void *memcpy(void *addrl, void *addr2,size_t n); memcpy()函数使用了void指针,以说明该函数只进行纯粹的内存复制,包括NULL字符(零字节)在内的任何内容都将被复制。请看下例。 #include"thingie, h" /*defines struct thingie */ struct thingie * p_src * p_dest; / *... * / memcpy{p_dest, p_src ,sizeof (struct thingie ) * numThingies ); 在上例中,memcpy()函数要复制的是存放在struct thingie结构体中的某种对象op_dest 和p_src都是指向struct thingie结构体的指针,memcpy()函数将把从p_src指向的位置开始的"sizeof(stuct thingie)*numThingies"个字节的内容复制到从p_dest指向的位置开始的一块内存区域中。对memcpy()函数来说,p_dest和p_src都仅仅是指向内存中的某个地址的指针。