{
int num;
int denum;
};
int main()
{
pp p;
p.denum =22;
p.num =654;
pp tp=*(pp*)&p.num ;
printf("%d\n", tp.denum );
}
结构体中首字段的地址可以转成结构体地址
位模式的应用:
1 通用的交换数据,类似于c++中的模板
void swap(void* x, void* y, const int size)
{
char *arr=(char*)malloc(size);
memcpy(arr, x, size);
memcpy(x,y,size);
memcpy(y,arr,size);
free(arr);
}
缺点: 当两个参数的类型不同时,大小以小的为准,在小端系统中得到的结果可能正确,在大端系统中通常都不正确
注意: 当调用方是char* 时,传入的就是 & char* 即指针的地址
指针使用的两个要点 1 知道指针类型 2 数组时要知道长度
2 通用的搜索数组中指定元素,并返回
void *GetData(void *array, void *key, int n, int numsize)
{
for(int i=0;i<n;i++)
{
void *temp=(char*)array+i*numsize; //array必须先强制转为char* 因为void* 需要指针类型及长度
if(memcmp(temp,key,numsize)==0)
return temp;
}
return NULL;
}