void 指针的背后藏着什么? void是什么意思
void是什么意思(void指针后面隐藏着什么?)
1 不能动的“地址”之 void指针
文章插图
【void 指针的背后藏着什么? void是什么意思】
1.1 void指针初探Void *代表一个“未知类型”的指针,所以我不知道从这个指针地址来看,一条数据有多少字节 。用int表示指针类似,但更明确的是它是“指针” 。
所以void *只能代表一个地址,不能用来取值,也不能++和-move指针,所以不知道一个数据单元是多少字节 。
intnums[]={3,5,6,7,9};void*ptr1=nums;//inti=*ptr1;//对于void指针没法直接取值int*ptr2=(int*)nums;printf( %d,%d\n ,ptr1,ptr2);inti=*ptr2;printf( %d\n ,i);从输出结果可以看出,无论是非类型化的void指针还是int指针,指向的地址都是相同的:
文章插图
PS: void *是一个不可移动的“地址”,在移动指针之前,必须将其转换为类型指针 。
1.2 void指针的用处
文章插图
在这里,让我们看看我们以前知道的memset函数 。它的第一个参数是一个void指针,可以帮助我们屏蔽不同类型指针的差异 。
如下面的代码所示,我们可以传入一个指向int类型数组的指针或一个指向char类型数组的指针:
intnums;memset(nums,0,sizeof(nums));charchs[2];memset(chs,0,sizeof(chs));然后,我们也可以尝试自己模仿这个memset函数,暂时命名为mymemset:
voidmymemset(void*data,intnum,intbyteSize){//char就是一个字节,而盘算机中是以字节为单位存储的char*ptr=(char*)data;inti;for(i=0;i byteSize;i++){*ptr=num;ptr++;}}intmain(intargc,char*argv[]){intnums[20];mymemset(nums,0,sizeof(nums));inti,len=sizeof(nums)/sizeof(int);for(i=0;i i++){printf( %d
推荐阅读
- 体检|俞敏洪:我认识的做企业的朋友,大多都在裁员,大学生找工作更难
- 丽的四字成语?带礼的四字词语?
- 轴对称图形的特点是沿着什么对折后。轴对称图形的特点是多少?
- 走之旁的笔顺演示!有谁能告诉我“走之旁”的笔顺是什么
- 元华|元华:拿成龙的800万片酬,以后找我演戏的就少了,不能因小失大
- 杨幂|杨幂穿着皮草内搭亮片吊带裙,唱得还挺嗨,网友:像舞厅里的辣妹
- 琥珀|技能是练出来的,办法是想出来的,潜力是逼出来的
- 来万达电影感受残奥冠军隐形的翅膀 隐形的翅膀 电影
- 告诉你国内最美月亮在哪里看 中国的月亮
- 天边的那朵云 天边的一朵云