首页>>科技 >>内容

void指针占几个字节,什么是void指针

发布时间:2023-11-30 10:14:09编辑:温柔的背包来源:

void指针占几个字节,什么是void指针

很多朋友对void指针占几个字节,什么是void指针不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

在C语言中,*类型是指针类型,如int *p、double q。虽然它们是不同的指针,但它们的大小是相同的sizeof(p)==sizeof(q) 因为它们都是相同的类型。 C语言是强类型语言,类型之间的区分非常严格。不同的类型占用不同的空间,并且有不同的地址偏移量;

|基本了解

void 可以指向任何类型的地址,但类型指针不能指向void 的地址。 void* 指针在强制类型转换后只能取正常值。 void*指针变量可以像普通指针一样初始化为等于0或NULL,表示一个当void*指针用作函数的输入和输出时,表示它可以接受任何类型的输入指针和输出任何类型的指针#include 'stdio.h'void *test(void *buff){ return buff;}int main (){ int nums[]={3, 5, 6, 7, 9}; //初始化指针void *p1=NULL; p1=数字; //打印地址printf('%d\\n', p1) ; //获取值(错误报告) //printf('%d\\n', *p1); //获取值(正常) printf('%d\\n', *(int *)p1); //地址偏移量(警告) //printf('%d\\n', ++p1); //地址偏移(正常) int *p2=(int *)p1; printf('%d\\n' ', p2++);}|典型应用

void*类型指针实际上是一种过渡指针状态。编写框架时输入不确定的情况下可以使用。有两种典型应用:

函数传递参数时类型不确定,或者需要支持多种类型的参数。

void function(int dataType, void* data) { //根据dataType的不同值进行不同的转换switch (dataType) { case 0: int* a=(int*)data;情况1: char* a=(char *)data; }}当函数的返回值不考虑类型而是关心大小时

void * memcpy(void *dest, const void *src, size_t len);void * memset (void * buffer, int c, size_t num);|函数指针

当你第一次看到下面这个函数时,你有什么感想?有没有一种既熟悉又陌生的感觉:

typedef void (*fun)(void *data1);看下面的用法:

#include 'stdio.h'//定义一个函数类型typedef void (*fun)(void *data1);//实例化一个函数变量fun test;//定义一个回调函数void callBack(void *p1){ printf( '%d\\n', *(int *)p1);}int main(){ int a=10;测试=回调;测试(a);}--结束--

以上知识分享希望能够帮助到大家!