C语言 void

C语言中void常用来修饰函数的返回值和参数

  • 如果函数没有返回值,那么应该将其声明为void
  • 如果函数没有参数,应该将其声明为void
#include<stdio.h>

f(){}
int main(){
    int i = f(1,2,3);//能编译通过,在C语言,对函数的定义可以不写参数和返回值,这种情况函数默认返回的是int,可以接受任意参数
    return 0;
}

不存在void变量

在C语言中,没有定义void究竟是多大内存的别名,也就是没有void标尺,无法在内存中裁剪出void对应的变量

#include<stdio.h>

int main() {
    void var; //error
    void array[5]; //error
    void *pv;

    return 0;
}

void指针

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

void的意义

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;
}

运行结果:

通过 <code>void*</code>实现Memset函数” title=”通过 <code>void*</code>实现Memset函数” /></p>
<h2><span id=void总结

  • void是一种抽象的数据类型
  • void类型不能用于定义变量
  • void类型用于声明函数无参数
  • void类型用于声明函数无返回值
  • 可以定义 void*类型的指针
  • void*类型的指针可以接受任意类型的指针值
赞(2)
未经允许不得转载:极客笔记 » C语言 void
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址