void类型指针
(2011-02-15 19:12:40)
标签:
指针内存中数据类型转换字节教育 |
分类: C语言程序设计 |
1.任何类型的指针都可以显式转换为void类型,且不会丢失数据。如以下程序:
#include<stdio.h>
int main(void)
{
short a=5;
void *p1;
short *p2;
p1=(void *)&a;
p2=(short *)p1;
printf(“%d\n”,*p2);
return 0;
}
2.void类型指针可以通过显式转换为具有更小或相同存储对齐限制的指针,但数据可能失真。所谓“相同存储对齐限制”是指void类型指针所指的数据在内存中所占的长度与显式转换后的指针所指的数据在内存中所占的长度相等,比如以上程序中的p1所指的原数据在内存中占2个字节,p2所指的数据在内存中也是占两个数据。但应注意的是,只有上面的这种转换前后指针所指数据类型一致的转换才保持数据不失真,如果类型不一致,即使具有相同存储对齐限制,也有可能失真,比如由short转向unsigned short,请看以下程序:
#include<stdio.h>
int main(void)
{
short a=-5,*p1=&a;
unsigned short *p2;
void *p3;
p3=(void *)p1;
p2=(unsigned short *)p3;
printf("%d\n",*p2);
return 0; }
#include<stdio.h>
int main(void)
{
short a=720;
char *p1;
void *p2;
p2=(void *)&a;
p1=(char *)p2;
printf("%d\n",*p1);
return 0; }
3.如果将void类型的指针转换为具有更大存储对齐限制的指针时,则会产生无效值。如以下程序:
#include<stdio.h>
int main(void)
{
short a=23;
void *p1;
int *p2;
p1=(void *)&a;
p2=(int *)p1;
printf("%d\n",*p2);
return 0; }

加载中…