C语言中void常用来修饰函数的返回值和参数:
#include<stdio.h>
f(){}
int main(){
    int i = f(1,2,3);//能编译通过,在C语言,对函数的定义可以不写参数和返回值,这种情况函数默认返回的是int,可以接受任意参数
    return 0;
}
在C语言中,没有定义void究竟是多大内存的别名,也就是没有void标尺,无法在内存中裁剪出void对应的变量
#include<stdio.h>
int main() {
    void var; //error
    void array[5]; //error
    void *pv;
    return 0;
}
C语言中规定只有相同类型的指针才可以相互赋值,void*指针作为左值用于接收任意类型的指针,void*指针作为右值使用时需要进行强制类型转换。
int *pI = (int *)malloc(sizeof(int));
char *pC = (char *)malloc(sizeof(char));
void *p = NULL;
int *pni = NULL;
char *pnc = NULL:
p = pI; //ok
pni = p; //error
p = pC; //ok
pnc = p; //error
ANSI C是标准C语言的规范,扩展C在ANSI C的基础上进行了扩充。
下面的代码在ANSI C编译器上无法通过编译,但是对于支持GNU标准的gcc编译器而言是合法的。
#include<stdio.h>
int main()
{
    printf("%d\n", sizeof(void));
    return 0;
}
gcc编译,输出结果是1。
void*实现Memset函数#include <stdio.h>
void MemSet(void* src, int length, unsigned char n)
{
    unsigned char* p = (unsigned char*)src;
    int i = 0;
    for(i=0; i<length; i++)
    {
        p[i] = n;
    }
}
int main()
{
    int a[5];
    int i = 0;
    MemSet(a, sizeof(a), 0);
    for(i=0; i<5; i++)
    {
        printf("%d\n", a[i]);
    }
    return 0;
}
运行结果:
void*实现Memset函数” title=”通过 void*实现Memset函数” />
void*类型的指针void*类型的指针可以接受任意类型的指针值本文链接:http://so.lmcjl.com/news/23732/