Linux c — void类型变量和指针

来源:互联网 发布:java pdf转word 编辑:程序博客网 时间:2024/05/16 00:35

Linux c — void类型变量和指针

1.什么是void?

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

void 只能修饰函数,不能修饰变量void * 函数、变量都可以被修饰

2.void的使用

2.1 void修饰变量

用void 定义一个a,编译后会报错

void a;//void.c: 在函数‘main’中://void.c:5: 错误:变量或字段‘a’声明为 void

这说明void类型不能修饰一个变量,因为系统无法为a分配一段大小为空的内存

2.2 void修饰函数

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

 void free(void *ptr);

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

最终打印的结果是
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);

函数在进行参数传递时,通过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个字节,并返回新的空间的首地址

使用这三个函数动态分配的空间,最后一定一定要使用free()函数释放该段空间!!

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

int*pn=(int*)malloc(5*sizeof(int));pn=(int*)realloc(pn,10*sizeof(int));

realloc()函数的原理是,如果在原空间紧接着的空间能满足新空间的大小,则直接在原空间后只见增加空间大小,否则会新生成一个符合大小的新空间,并将原空间的内容复制到新空间上。

0 0
原创粉丝点击