linux c void类型

本文详细介绍了C语言中的void类型及其使用规则。void类型不能用于修饰变量,但可以修饰函数,表示函数无返回值或者参数类型不确定。void*指针可以接受任何类型指针并进行类型转换,常用于内存管理和库函数参数。void*修饰的函数返回值为通用指针,需要转换后才能解引用。文章还列举了动态内存分配函数如malloc、calloc和realloc的使用,并强调了释放内存的重要性。
摘要由CSDN通过智能技术生成

原文地址:https://blog.csdn.net/men_wen/article/details/52565652

1.什么是void?
void在英文中形容词的意思就是无效的,空的,空虚的意思,在C语言中就是空类型的意思。
在C语言中,使用void这个类型时,有如下规则:

void 只能修饰函数,不能修饰变量
void * 函数、变量都可以被修饰
1
2
2.void的使用
2.1 void修饰变量
用void 定义一个a,编译后会报错

void a;
//void.c: 在函数‘main’中:
//void.c:5: 错误:变量或字段‘a’声明为 void
1
2
3
这说明void类型不能修饰一个变量,因为系统无法为a分配一段大小为空的内存

2.2 void修饰函数
void修饰函数,就是当函数返回值为空时,使用void类型变量修饰
例如我们经常使用的free()函数

 void free(void *ptr);
1
free()函数包含在#include

2.3 void * 修饰变量
用void *修饰的变量,那么一定就是指针变量,这个指针变量可以接受任何指针类型的地址,并且也可以转换为任何类型的指针

    int a = 10;
    double b = 20.22;
    void *pa = &a;
    void *pb = &b;
    printf("%d\n", (*(int *)pa));
    printf("%f\n", (*(double *)pb));
1
2
3
4
5
6
最终打印的结果是
10
20.220000
这说明,void*指针变量,这个指针变量占4个字节,就像是一个通用类型,就类似C++中的模板,但是我们不能直接对一个void*类型的指针进行解操作,我们连一个void类型的变量都无法定义,更不用说通过void*指针去访问这个void类型变量
这种void*类型指针在C语言库函数中极为常见:

void *memset(void *s, int c, size_t n);
void free(void *ptr);
1
2
函数在进行参数传递时,通过void *类型接收任意类型地址,操作时在转换成所需类型指针进行解操作

2.4 void *修饰函数
void 修饰函数,就是函数的返回值变量为void 类型,它与void*修饰变量含义相似,侧重点在于对指针的操作,返回值为void *,接收时转换为我们需要的类型,就可以解操作
例如:

void *calloc(size_t nmemb, size_t size); //申请一段大小为size字节的空间,并且初始化为nmenb,返回这段空间的首地址
void *malloc(size_t size);//申请一段大小为size字节的空间,返回这段空间的首地址
void *realloc(void *ptr, size_t size);//动态内存调整,将地址为ptr的空间的大小改变为size个字节,并返回新的空间的首地址
1
2
3
使用这三个函数动态分配的空间,最后一定一定要使用free()函数释放该段空间!!

这三个函数均返回一个void *类型的指针,在我们接收这个动态申请的空间时,
我们需要将void *类型转换为需要的类型。

int*pn=(int*)malloc(5*sizeof(int));
pn=(int*)realloc(pn,10*sizeof(int));
1
2
realloc()函数的原理是,如果在原空间紧接着的空间能满足新空间的大小,则直接在原空间后只见增加空间大小,否则会新生成一个符合大小的新空间,并将原空间的内容复制到新空间上。
————————————————
版权声明:本文为CSDN博主「men_wen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/men_wen/article/details/52565652

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值