void* 指针有什么用
来源:互联网 发布:qq加人软件 编辑:程序博客网 时间:2024/04/29 17:54
void*其实可以理解为一个context,利用它可以很好的实现C语言面向对象编程。我觉得使用void*,不是为了看起来合适,而是一个约定,使用C/C++编程的人员看到void*,习惯性的就会认为——这是个私有数据,只有定义的一方才有权解释;这也是我们在回调函数中传递void*作为userdata的基础共识。
void*
指针其实可以用作泛型,你想象一下你在C中要交换两个变量,如果是两个整数的话,就像:
void swap_int(int* lhs, int* rhs){ int tmp = *lhs; *lhs = *rhs; *rhs = tmp;}
如果要交换小数,那还要写一个
void swap_float(float* lhs, float* rhs){ ;//}
那么既然都是把两个变量的bit pattern交换一下,那就可以把这种方法抽象出来:
void swap(void* lsh, void* rhs){ ;//}
因为你不知道究竟要交换多少个bit,所以,还需要一个参数来指定要交换的bit的数量:
void swap(void* lsh, void* rhs, size_t size){ ;//}
有了这样一个函数,那么如果想要交换两个变量,那就可以:
swap(&ai, &bi, sizeof(int));swap(&af, &bf, sizeof(float));
用void* 仅仅是为了“看起来”合乎逻辑
但是,用回上面的例子,如果我用float*
代替void*
,那的确是可以的,但是我为什么每次调用它都要先做强制类型转换swap((float* )&ai, (float* )&bi, sizeof(int))
,你把这样一个接口给另外的一个人使用,他会怎么想?我擦,你交换两个整数,还要先转换为float*
,万一给个新手,人家还不敢用,我擦,你这里面有什么奥妙么?
的确,void*
和其他指针一样,都是占同样大小的内存空间,唯一和其他指针不同的就在于你不能对void*
进行解引用,看起来其他类型的指针都可以用void*
来代替,只要在解引用之前把它转换为相应类型的指针就OK了!
那么,如果是这样的话,那用void*
的确是为了看起来合乎逻辑。我暂时也想不到有哪些情况是必须要用上void*
的!
2 0
- void* 指针有什么用
- void* 指针有什么用
- JavaScript:void(0)有什么用
- (void)printf("hello world"); int a=2; void(a);中的(void)有什么用?
- +(void)load; +(void)initialize;有什么用处?
- +(void)load; +(void)initialize;有什么用处?
- 指针到底有什么用?
- 指针的指针有什么用
- (void)fprintf 里面的(void)有什么作用
- objective-c中 -(void)和+(void)有什么不同
- javascript:void(0)有什么作用?
- 指向指针的指针变量有什么用
- [C]指针有什么好处?
- 用Void指针的交换
- 【基础知识思考整理】函数指针有什么用?
- void及void指针
- void和void指针
- void 指针 void*
- 360机试题:挑选镇长
- MFC按键控制
- Perl 监控Redis
- [Leetcode]Count and Say
- 收房验房注意事项
- void* 指针有什么用
- 浅析 Linux 中的时间编程和实现原理,第 1 部分: Linux 应用层的时间编程
- WEB系统大规模并发——电商秒杀与抢购
- 8月6日所学
- JavaScript 编程
- 【leetcode每日一题】NO83.Remove Duplicates from Sorted List
- 1050. String Subtraction (20)
- iOS音乐后台播放及锁屏信息显示
- ubuntun开机以命令行启动