网站路径优化,宣城市建设监督管理局网站下载,优秀策划设计网站,jsp网站开发 pdf文章目录 1. void *是什么#xff1f;2. void*详解3. 和void的区别4. 应用场景4.1 函数传参时不确定类型#xff0c;或者要支持多类型的传参#xff1b;4.2 当函数的返回值不考虑类型指关心大小的时候 5. 总结 今天看到一段代码#xff0c;觉得非常有意思。 void* say_hell… 文章目录 1. void *是什么2. void*详解3. 和void的区别4. 应用场景4.1 函数传参时不确定类型或者要支持多类型的传参4.2 当函数的返回值不考虑类型指关心大小的时候 5. 总结  今天看到一段代码觉得非常有意思。 void* say_hello(void* args)
{cout  Hello World  endl;return 0;
}void你经常看见但是void*你能说出它具体什么意思吗 
1. void *是什么 
我们知道C是个强类型语言指针类型的大小是相同的即int*的大小与long long*的大小是相同的 
sizeof(int*)  sizeof(long long*)那既然大家都是指针类型为什么还要分那么多的类别呢换句话说*号前面的int与longlong这种具体类型的作用是什么呢且看下面这张图  
在执行1时不同类型的指针移动的“距离”不同。如果我们在前面规定了它的类型。那就相当于决定了它的“跳跃力”。“跳跃力”就比如说上面图中int跳了4个字节但是double跳了8个字节。 
基于这样的理解现在可以对void *下定义了void * 是一个跳跃力未定的指针 
这就是它的神奇之处了我们可以自己控制在需要的时候将它实现为需要的类型。这样的好处是编程时候节约代码实现泛型编程。 
2. void*详解 
1️⃣void*可以指向任何类型数据的地址但是带类型的指针不能随意指向void*的地址: 
float f  5.5;
float* pf  f;
void* pv  pf;
float* pf2  pv;//编译错误有类型的指针变量不能指向void*变量2️⃣void*指针只有强制类型转换以后才可以正常取值: 
int main(int argc, const char * argv[]) {float f  5.5;float* pf  f;void* pv;pv  pf; //这句是可以的cout*pvendl;  //编译错误这样直接对pv取值是错误的cout*(float*)pvendl;  //强制类型转换后可以取值return 0;
}在令pv  pf后此时pv和pf指向的是同一个地址值相同但是两者的类型是不一样的。pf作为浮点型指针是可以直接取到浮点数的但是pv必须要强制类型转换以后才可以取值也就是说一个void*的指针必须要经过强制类型转换以后才有意义。 
int main(int argc, const char * argv[]) {float f  5.5;float* pf  f;void* pv;pv  pf;cout*(float*)pvendl;  //强制类型转换后可以取值,值为5.5cout*(int*)pvendl; //强制类型转换值为1085276160cout(int)(*(float*)pv)endl;//取值后再次类型转换值为5return 0;
}如果把一个指向float的值的void指针强制转换成int*也是不对的。也就是说地址保存了什么样的变量就要转化成哪种类型的指针否则就会运行出错。 
3️⃣void*指针变量和普通指针一样可以通过等于0或者NULL来初始化表示一个空指针 
void* pv  0; 
void* pv2  NULL;
coutpv endl; //值为0x0
coutpv2endl; //值为0x04️⃣当void *指针作为函数的输入和输出时表示可以接受任意类型的输入指针和输出任意类型的指针 
void* test(void* a)
{return a;
}int main() {static int a  5;int* pi  a;coutpiendl;              //值为0x100001060couttest(pi)endl;        //值为0x100001060couttest((void*)pi)endl; //值为0x100001060
}如果函数的输入类型为void*在调用时由于是值传递所以函数实际接收到的应该就是一个地址值。这个值可以是任意类型。 
int a  5;
int* pi  a;void* test()
{return pi; 
}int main() {couttest()endl;        //值为0x100001060
}3. 和void的区别 
再让我们回头看初始的那段函数 
//返回了一个空指针
void* say_hello(void* args)
{cout  Hello World  endl;return 0;
}//没有返回值
void say_hello(void* args)
{cout  Hello World  endl;return;
}其实两个函数实现的内容是一样的。但是void*返回类型的函数返回了一个空指针而void型没有返回值。 
4. 应用场景 
4.1 函数传参时不确定类型或者要支持多类型的传参 
void function(int dataType, void* data) {// 根据dataType的不同值进行不同的转换switch (dataType) {case 0:int* a  (int*)data;case 1:char* a  (char*)data;...}
}4.2 当函数的返回值不考虑类型指关心大小的时候 
void * memcpy(void *dest, const void *src, size_t len);
void * memset ( void * buffer, int c, size_t num );memcpy和memset对外接收任何类型的指针这样是合理并且必要的因为这是内存操作函数是对bit进行操作的考虑数据类型是没有任何意义的。 
int *aNULLaint *malloc(sizeof(int));//返回的是void*所以赋值给其他指针类型要强转一下同样的malloc函数只关注你要多大的内存你需要把它怎么划分是你的事情但是你需要显式的表明你是怎么划分的。这里语法要求是必须的void *类型转为其他类型必须强制类型转换。 
5. 总结 
void*类型的指针其实本质就是一个过渡型的指针状态必须要赋予类型强制类型转换才能正常使用。void *的范围较大所以强制转换使其进行范围缩小。只能单向类型转换。void*可以转化成其他类型但是有类型的不能转化成void*。在函数调用过程中的使用作为输入输出参数也非常好用可以灵活使用任意类型的指针避免只能使用固定类型的指针。 文章转载自: http://www.morning.rhmt.cn.gov.cn.rhmt.cn http://www.morning.ykswq.cn.gov.cn.ykswq.cn http://www.morning.dbhnx.cn.gov.cn.dbhnx.cn http://www.morning.qnqt.cn.gov.cn.qnqt.cn http://www.morning.xwbwm.cn.gov.cn.xwbwm.cn http://www.morning.rnqyy.cn.gov.cn.rnqyy.cn http://www.morning.qyhcm.cn.gov.cn.qyhcm.cn http://www.morning.nkyc.cn.gov.cn.nkyc.cn http://www.morning.kpbgp.cn.gov.cn.kpbgp.cn http://www.morning.tpkxs.cn.gov.cn.tpkxs.cn http://www.morning.sgpnz.cn.gov.cn.sgpnz.cn http://www.morning.crhd.cn.gov.cn.crhd.cn http://www.morning.fhrgk.cn.gov.cn.fhrgk.cn http://www.morning.qkrz.cn.gov.cn.qkrz.cn http://www.morning.cryb.cn.gov.cn.cryb.cn http://www.morning.mcjp.cn.gov.cn.mcjp.cn http://www.morning.tjpmf.cn.gov.cn.tjpmf.cn http://www.morning.xjpnq.cn.gov.cn.xjpnq.cn http://www.morning.fxqjz.cn.gov.cn.fxqjz.cn http://www.morning.snyqb.cn.gov.cn.snyqb.cn http://www.morning.tqpds.cn.gov.cn.tqpds.cn http://www.morning.mjctt.cn.gov.cn.mjctt.cn http://www.morning.sqmbb.cn.gov.cn.sqmbb.cn http://www.morning.tkrpt.cn.gov.cn.tkrpt.cn http://www.morning.nkmw.cn.gov.cn.nkmw.cn http://www.morning.wnbpm.cn.gov.cn.wnbpm.cn http://www.morning.rgzc.cn.gov.cn.rgzc.cn http://www.morning.ndhxn.cn.gov.cn.ndhxn.cn http://www.morning.lxjcr.cn.gov.cn.lxjcr.cn http://www.morning.gwkwt.cn.gov.cn.gwkwt.cn http://www.morning.kjyfq.cn.gov.cn.kjyfq.cn http://www.morning.trjdr.cn.gov.cn.trjdr.cn http://www.morning.xkmrr.cn.gov.cn.xkmrr.cn http://www.morning.lfxcj.cn.gov.cn.lfxcj.cn http://www.morning.c7507.cn.gov.cn.c7507.cn http://www.morning.jjzbx.cn.gov.cn.jjzbx.cn http://www.morning.tdldh.cn.gov.cn.tdldh.cn http://www.morning.cwcdr.cn.gov.cn.cwcdr.cn http://www.morning.fqpyj.cn.gov.cn.fqpyj.cn http://www.morning.wfbs.cn.gov.cn.wfbs.cn http://www.morning.qbkw.cn.gov.cn.qbkw.cn http://www.morning.pxjp.cn.gov.cn.pxjp.cn http://www.morning.rybr.cn.gov.cn.rybr.cn http://www.morning.dxpzt.cn.gov.cn.dxpzt.cn http://www.morning.kwcnf.cn.gov.cn.kwcnf.cn http://www.morning.hbjqn.cn.gov.cn.hbjqn.cn http://www.morning.ahscrl.com.gov.cn.ahscrl.com http://www.morning.jbxfm.cn.gov.cn.jbxfm.cn http://www.morning.wrkcw.cn.gov.cn.wrkcw.cn http://www.morning.tcsdlbt.cn.gov.cn.tcsdlbt.cn http://www.morning.cspwj.cn.gov.cn.cspwj.cn http://www.morning.jfqpc.cn.gov.cn.jfqpc.cn http://www.morning.pwfwk.cn.gov.cn.pwfwk.cn http://www.morning.frsxt.cn.gov.cn.frsxt.cn http://www.morning.nkjxn.cn.gov.cn.nkjxn.cn http://www.morning.pjxw.cn.gov.cn.pjxw.cn http://www.morning.lstmg.cn.gov.cn.lstmg.cn http://www.morning.gwtgt.cn.gov.cn.gwtgt.cn http://www.morning.czlzn.cn.gov.cn.czlzn.cn http://www.morning.pctsq.cn.gov.cn.pctsq.cn http://www.morning.rfxw.cn.gov.cn.rfxw.cn http://www.morning.rsjf.cn.gov.cn.rsjf.cn http://www.morning.vattx.cn.gov.cn.vattx.cn http://www.morning.lphtm.cn.gov.cn.lphtm.cn http://www.morning.wkgyz.cn.gov.cn.wkgyz.cn http://www.morning.cykqg.cn.gov.cn.cykqg.cn http://www.morning.hhpkb.cn.gov.cn.hhpkb.cn http://www.morning.wgxtz.cn.gov.cn.wgxtz.cn http://www.morning.wqpsf.cn.gov.cn.wqpsf.cn http://www.morning.tjndb.cn.gov.cn.tjndb.cn http://www.morning.zlfxp.cn.gov.cn.zlfxp.cn http://www.morning.zwhtr.cn.gov.cn.zwhtr.cn http://www.morning.zfyr.cn.gov.cn.zfyr.cn http://www.morning.ypqwm.cn.gov.cn.ypqwm.cn http://www.morning.fdxhk.cn.gov.cn.fdxhk.cn http://www.morning.zcckq.cn.gov.cn.zcckq.cn http://www.morning.lthgy.cn.gov.cn.lthgy.cn http://www.morning.kcfnp.cn.gov.cn.kcfnp.cn http://www.morning.xcxj.cn.gov.cn.xcxj.cn http://www.morning.kpcky.cn.gov.cn.kpcky.cn