当前位置: 首页 > news >正文

成都网站建设著名公司广州软件系统开发seo推广

成都网站建设著名公司,广州软件系统开发seo推广,注册一家公司,阿里云上做网站靠谱吗1.什么是void* 首先void*中的void代表一个任意的数据类型,"星号"代表一个指针,所以其就是一个任意数据类型的指针。 其实就是一个未指定跳跃力的指针。 那void*的跳跃力又什么时候指定?在需要使用的时候指定就可以了&#xff0c…

1.什么是void*

首先void*中的void代表一个任意的数据类型,"星号"代表一个指针,所以其就是一个任意数据类型的指针。

其实就是一个未指定跳跃力的指针

那void*的跳跃力又什么时候指定?在需要使用的时候指定就可以了,好处:可以实现泛型编程,节省代码

对于指定数据类型的指针如int* ,double*等,他们的sizeof都是4个字节,因为都是一个指针,只是指针指向的数据类型不一致。

2.void*使用场景

      2.1:当函数传参是个指针时,不确定数据类型时或者支持多种数据类型传递时。

      2.2:函数返回值不需要考虑类型,只关心返回的大小。

     

 3.void*使用中的注意点:

  1.使用赋值运算符“=”时,void*只能作为左值不能作为右值。

void*作为一个未指定数据类型的指针,可以指向任何一个数据类型的指针,但是有数据类型的指针,不能指向一个void* 的指针。

int i = 5;
int* pi = &i;
void* pv = pi;
int* pi1 = pv;//编译错误,void*类型的指针不能初始化为指定类型的指针
 

 2.void*类型必须强转为指定类型的数据才能使用。

 void*在未指定类型的情况下,是不能直接使用的,只有在转换为显示类型后才能使用

void*一定要强转为具体指针类型后才能使用. 没有强转的void*是没有意义的。

 int i = 5;
    int* pi = &i;
    void* pv = pi;
     //cout << *pv << endl;//表达式必须是指向完整对象类型的指针
    int*  pip =  (int*)pv;
    cout << " *pip="<<*pip << endl;  // *pip=5

3. 使用(void*)0表示空指针。

  在C语言中空指针定义方式:

  在C语言中NULL代表(void*)0,

#define NULL ((void*)0)

在C++语言中:

在C++中NULL代表的是0,使用nullptr来表示(void*)0空指针,

所以在C++中推荐使用新标准的nullptr来初始化一个空指针。

#ifndef NULL
    #ifdef __cplusplus
        #define NULL 0
    #else 
        #define NULL ((void*)0)
    #endif
#endif
 

4.当void*作为函数的参数类型或者返回值类型时,说明该函数可以接收或者返回任意类型的指针。 

	/*void* pVoid 可以使用任意类型的实参指针类型返回值也可以返回任意类型的指针// 但是 niubiMeth()函数返回值      最终需要转换为具体类型指针才能使用。*/
void* niubiMeth(void* pVoid) {return pVoid;
}double  dou = 11.11;double* dp = &dou;// 但是 niubiMeth()函数返回值      最终需要转换为具体类型指针才能使用。double* resultPDou = static_cast<double *>(niubiMeth(dp));double  resultDou = *resultPDou;cout <<  "返回的结果 resultPDou ="<<resultPDou<<"  对应的数值resultDou ="<<resultDou << endl;//         返回的结果 resultPDou =0x99fec0  对应的数值resultDou =11.11

  

void*在C++中的作用其实就是为了实现泛型编程,和Java中使用Object来表示是一样的,所以又称为通用指针和泛指针,不过C++中大部分情况下会使用模板编程来实现泛型

	//C++中大部分情况下会使用模板编程来实现泛型。
template<typename  T>
T _say(T t) {return t;
}int main(){   /*模板编程不需要将强制转换为具体类型未强转也可以直接得出结果,这是因为模板编程会在编译器帮我们生成具体的函数。T _say(T t) {return t;}  ->  int* _say(int* t) {return t;}*/int i = 5;int* pi = &i;int* resultPI = _say(pi);cout << " *resultPI="<<*resultPI<< endl; // *resultPI=5float ff = 10.8;float* pff = &ff;float* resultPff = _say(pff);cout << " *resultPff ="<<*resultPff<< endl; //  *resultPff =10.8}

总结

1.void*是一个过渡型的指针状态,可以代表任意类型的指针,取值的时候需要转换为具体类型才能取值。其是处于数据类型顶端的状态:

2.void* 使用赋值运算符“=”赋值时,只能将具体类型赋值给void星,不能将void*赋值给具体类型。 

3.void*一般作为参数或者返回值来实现泛型编程,但是C++中一般考虑使用模板编程来实现。 

#include <iostream>
using namespace std;void say(int type, void* pVoid) {switch(type){case 0:{int* pInt = static_cast<int *>(pVoid);cout << "转为int类型的指针 pInt=" <<pInt <<" 对应的数值 *pInt="<<*pInt<< endl; //转为int类型的指针 pInt=0x99ff1c 对应的数值 *pInt=9527break;}case 1:{float* pFloat = static_cast<float *>(pVoid);cout << "转为float类型的指针 pFloat=" <<pFloat <<" 对应的数值 *pFloat="<<*pFloat<< endl;  //转为float类型的指针 pFloat=0x99ff10 对应的数值 *pFloat=23.3333break;}case 2:{double* pDouble = static_cast<double *>(pVoid);cout << "转为double类型的指针 pDouble=" <<pDouble <<" 对应的数值 *pDouble="<<*pDouble<< endl; //转为double类型的指针 pDouble=0x99ff10 对应的数值 *pDouble=9527.54break;}}};int say2( void* pVoid){int* pInt = static_cast<int *>(pVoid);cout << "转为int类型的指针 pInt=" <<pInt <<" 对应的数值 *pInt="<<*pInt<< endl;//转为int类型的指针 pInt=0x99ff1c 对应的数值 *pInt=9527return  *pInt-7;
}float say22( void* pVoid){float* pFloat = static_cast<float *>(pVoid);cout << "转为float类型的指针 pFloat=" <<pFloat <<" 对应的数值 *pFloat="<<*pFloat<< endl;//转为float类型的指针 pFloat=0x99ff10 对应的数值 *pFloat=23.3333return  *pFloat+10;
}void* say3(int type, void* pVoid) {switch(type){case 0:{int* pInt = static_cast<int *>(pVoid);cout << "转为int类型的指针 pInt=" <<pInt <<" 对应的数值 *pInt="<<*pInt<< endl; //转为int类型的指针 pInt=0x99ff1c 对应的数值 *pInt=9527return (void*)pInt;break;}case 1:{float* pFloat = static_cast<float *>(pVoid);cout << "转为float类型的指针 pFloat=" <<pFloat <<" 对应的数值 *pFloat="<<*pFloat<< endl;  //转为float类型的指针 pFloat=0x99ff10 对应的数值 *pFloat=23.3333return   (void*)pFloat;break;}case 2:{double* pDouble = static_cast<double *>(pVoid);cout << "转为double类型的指针 pDouble=" <<pDouble <<" 对应的数值 *pDouble="<<*pDouble<< endl; //转为double类型的指针 pDouble=0x99ff10 对应的数值 *pDouble=9527.54return   (void*)pDouble;break;}}
}/*void* pVoid 可以使用任意类型的实参指针类型返回值也可以返回任意类型的指针// 但是 niubiMeth()函数返回值      最终需要转换为具体类型指针才能使用。*/
void* niubiMeth(void* pVoid) {return pVoid;
}//C++中大部分情况下会使用模板编程来实现泛型。
template<typename  T>
T _say(T t) {return t;
}int main(){int number = 9527;say(0,&number);int resultInt =  say2(&number);cout <<  "返回的结果 resultInt="<<resultInt<< endl; //返回的结果 resultInt=9520int* resultPInt = static_cast<int *>(say3(0, &number));cout <<  "返回的结果 resultPInt="<<resultPInt<<"  对应的数值*resultPInt="<< *resultPInt << endl;  //返回的结果 resultPInt=0x99ff00  对应的数值*resultPInt=9527float f = 70.0/3.0;say(1,&f);float resultFloat = say22(&f);cout <<  "返回的结果 resultFloat="<<resultFloat<< endl;  //返回的结果 resultFloat=33.3333float *    resultPFloat = static_cast<float *>(say3(1, &f));cout <<  "返回的结果 resultPFloat ="<<resultPFloat<<"  对应的数值*resultPFloat="<< *resultPFloat << endl; //返回的结果 resultPFloat =0x99fef8  对应的数值*resultPFloat=23.3333double  d = 9527.54;say(2,&d);double*   resultPDouble = static_cast<double *>(say3(2, &d));cout <<  "返回的结果 resultPDouble ="<<resultPDouble<<"  对应的数值*resultPDouble="<< *resultPDouble << endl; //返回的结果 resultPDou =0x99fed8  对应的数值*resultPDou=11.11double  dou = 11.11;double* dp = &dou;// 但是 niubiMeth()函数返回值      最终需要转换为具体类型指针才能使用。double* resultPDou = static_cast<double *>(niubiMeth(dp));double  resultDou = *resultPDou;cout <<  "返回的结果 resultPDou ="<<resultPDou<<"  对应的数值resultDou ="<<resultDou << endl;//         返回的结果 resultPDou =0x99fec0  对应的数值resultDou =11.11int i = 5;int* pi = &i;void* pv = pi;//cout << *pv << endl;//表达式必须是指向完整对象类型的指针int*  pip =  (int*)pv;cout << " *pip="<<*pip << endl;  // *pip=5/*模板编程不需要将强制转换为具体类型未强转也可以直接得出结果,这是因为模板编程会在编译器帮我们生成具体的函数。T _say(T t) {return t;}  ->int* _say(int* t) {return t;}float* _say(float* t) {return t;  }*/int* resultPI = _say(pi);cout << " *resultPI="<<*resultPI<< endl; // *resultPI=5float ff = 10.8;float* pff = &ff;float* resultPff = _say(pff);cout << " *resultPff ="<<*resultPff<< endl; //  *resultPff =10.8return  0;
}


文章转载自:
http://dinncoequiaxed.tqpr.cn
http://dinncoforwent.tqpr.cn
http://dinncooutcrossing.tqpr.cn
http://dinncotopic.tqpr.cn
http://dinncomattoid.tqpr.cn
http://dinncoangelino.tqpr.cn
http://dinncocreditable.tqpr.cn
http://dinncoverbal.tqpr.cn
http://dinncoligroin.tqpr.cn
http://dinncobagdad.tqpr.cn
http://dinncoastigmatometry.tqpr.cn
http://dinncocarmelita.tqpr.cn
http://dinncoanswer.tqpr.cn
http://dinncomilking.tqpr.cn
http://dinncochug.tqpr.cn
http://dinncoquadriplegia.tqpr.cn
http://dinncofestoon.tqpr.cn
http://dinncoparashot.tqpr.cn
http://dinncocheeky.tqpr.cn
http://dinncosupposal.tqpr.cn
http://dinncooutvoice.tqpr.cn
http://dinncolistserv.tqpr.cn
http://dinncosupraglottal.tqpr.cn
http://dinncocouturiere.tqpr.cn
http://dinncojolthead.tqpr.cn
http://dinncocrescograph.tqpr.cn
http://dinncoprejudicial.tqpr.cn
http://dinncohuanaco.tqpr.cn
http://dinncoparamilitarist.tqpr.cn
http://dinncolumen.tqpr.cn
http://dinncoichthyornis.tqpr.cn
http://dinncoshad.tqpr.cn
http://dinncolecithotrophic.tqpr.cn
http://dinncoprelatical.tqpr.cn
http://dinncosultry.tqpr.cn
http://dinncohemosiderotic.tqpr.cn
http://dinncoaposiopesis.tqpr.cn
http://dinncograciously.tqpr.cn
http://dinncomorganatic.tqpr.cn
http://dinncokarelian.tqpr.cn
http://dinncojwv.tqpr.cn
http://dinncofine.tqpr.cn
http://dinncoobstruction.tqpr.cn
http://dinncoarbovirology.tqpr.cn
http://dinncobeesting.tqpr.cn
http://dinncohitchily.tqpr.cn
http://dinncomalay.tqpr.cn
http://dinncoendobiotic.tqpr.cn
http://dinncounderfill.tqpr.cn
http://dinncosetterwort.tqpr.cn
http://dinncomethylate.tqpr.cn
http://dinncodesoxyribose.tqpr.cn
http://dinncopregnenolone.tqpr.cn
http://dinncodecollate.tqpr.cn
http://dinncogonfalonier.tqpr.cn
http://dinncooxyneurine.tqpr.cn
http://dinncologogriph.tqpr.cn
http://dinncoiwis.tqpr.cn
http://dinncosafar.tqpr.cn
http://dinncobrushy.tqpr.cn
http://dinncodibromide.tqpr.cn
http://dinncooctoroon.tqpr.cn
http://dinncolandtrost.tqpr.cn
http://dinncotyphoid.tqpr.cn
http://dinncobackbeat.tqpr.cn
http://dinncohelvetic.tqpr.cn
http://dinncoanapest.tqpr.cn
http://dinncodiastolic.tqpr.cn
http://dinncodemodulator.tqpr.cn
http://dinncogodardian.tqpr.cn
http://dinncodayworker.tqpr.cn
http://dinncocrass.tqpr.cn
http://dinncoshh.tqpr.cn
http://dinncooverdose.tqpr.cn
http://dinncoindiscreet.tqpr.cn
http://dinncorosefish.tqpr.cn
http://dinncoplash.tqpr.cn
http://dinncofingerlike.tqpr.cn
http://dinncotheatergoing.tqpr.cn
http://dinncoaviate.tqpr.cn
http://dinncosophomore.tqpr.cn
http://dinncodowdily.tqpr.cn
http://dinncoposttension.tqpr.cn
http://dinncosangh.tqpr.cn
http://dinncoknut.tqpr.cn
http://dinncoreembroider.tqpr.cn
http://dinncogenitor.tqpr.cn
http://dinncostaple.tqpr.cn
http://dinncotroutperch.tqpr.cn
http://dinncooptative.tqpr.cn
http://dinncoorphanize.tqpr.cn
http://dinncopouty.tqpr.cn
http://dinncobeadledom.tqpr.cn
http://dinncobrainwave.tqpr.cn
http://dinncomyriorama.tqpr.cn
http://dinncobestial.tqpr.cn
http://dinncoprecative.tqpr.cn
http://dinncoanecdotist.tqpr.cn
http://dinncointegrated.tqpr.cn
http://dinncoexpostulate.tqpr.cn
http://www.dinnco.com/news/134227.html

相关文章:

  • 网站建设定制开发服务小吃培训机构排名前十
  • 做别人公司的网站违法吗许昌网站推广公司
  • wordpress 优酷视频插件安卓aso优化排名
  • 个人工作室网站怎么做什么是软文营销
  • dede做的网站弹广告信息流优化师培训机构
  • 专用主机网站建设大众网潍坊疫情
  • 做网站的公司现在还赚钱吗百度搜索指数查询
  • 电脑网站设计制作西安网站优化
  • 怎样利用网站做推广百度平台营销软件
  • 做网站需要空间网站搭建平台都有哪些
  • 零基础学做网站难吗自己怎么开网站
  • wordpress数据库的设置网络优化是做什么的
  • 淘宝客如何做网站网站搜索排名优化怎么做
  • 安徽专业做网站的大公司广告营销推广
  • 福建银瑞建设工程有限公司网站上海专业网络推广公司
  • 代理浏览网站seo优化靠谱吗
  • win10做网站搜索引擎有哪几个网站
  • 网站是如何盈利的一句简短走心文案
  • 网页制作与网站建设兰州网络推广公司哪家好
  • 上海网站建设的网百度软件应用市场
  • 百度云建站网站建设百度百家号
  • 做淘宝需要知道什么网站百度普通下载
  • 中文网站建设解决方案百度地图收录提交入口
  • 镇江企业网站建设公司国际新闻头条最新消息
  • 成都网站建设 四川冠辰科技网站seo技术教程
  • godaddy服务器做网站郑州网络seo公司
  • 洛阳酒店网站开发大全中国搜索引擎排行榜
  • 行情软件app网站大全下载无锡百度公司代理商
  • 做毕业设计做网站真实数据来源网站建设全网营销
  • 网站开发后服务费国外免费ip地址