其他
void*到底是怎样的存在?
The following article is from 编程珠玑 Author 守望先生
void*
。void*
到底是怎样的存在?指针类型的含义
void*
之前,先了解一下普通指针类型的含义。//main.c
#include <stdio.h>
int main(void)
{
int a[] = {0x01020304,2019};
int *b = a;
char *c = (char*)&a[0];
printf("b+1:%d\n",*(b+1));
printf("c+1:%d\n",*(c+1));
return 0;
}
上面的输出结果为:
c+1:3
一个是指向整型的指针,一个是指向char型的指针,当它们执行算术运算时,它们的步长就是对应类型占用空间大小。
即
04 | 03 | 02 | 01 | 2019 |
04 | 03 | 02 | 01 | 2019 |
结论
int *b = (int*)a+2;
指针占用空间大小
Class: ELF32
void*
void\*
,它无条件接受各种类型。解引用 算术运算
int main(void)
{
int a = 10;
int *b = &a;
void *c = b;
*c;
return 0;
}
如何使用
void *memcpy(void *dest, const void *src, size_t n);
注意
typedef struct student_tag
{
char name[STU_NAME_LEN]; //学生姓名
unsigned int id; //学生学号
int score; //学生成绩
}student_t;
int studentCompare(const void *stu1,const void *stu2)
{
/*强转成需要比较的数据结构*/
student_t *value1 = (student_t*)stu1;
student_t *value2 = (student_t*)stu2;
return value1->score-value2->score;
}
studentCompare
函数后,必须转换为其对应的类型进行处理。更多函数指针相关内容可以参考《高级指针话题-函数指针》,那里有更多的介绍。
总结
这里有一片内存数据,我也不知道什么类型,给你了,你自己想怎么用怎么用吧,不过要用对奥! 我这里什么类型都能处理,你给我一片内存数据就可以了
相关精彩推荐