斯坦福编程笔记,day10.29.18

1 泛型的基本引入与纯C实现
void swap( int* ap, int * bp)
{
int temp =*ap;
*ap =*bp;
*bp=temp;
}
如何将上述函数通用化,满足不同数据类型,本质上是内存的互换
一种理想的错误答案:
void swap( void *vp1, void *vp2)
{
void temp =*vp1;
*vp1 = *vp2;
*vp2 =temp;
}
错误在于:1无法定义void 型的变量,不知道这块内存有多大;

正确的方法:
void swap (void *vp1,void *vp2, int size)
{
char buffer[size];//依赖编译器实现,ANSI C中可以使用mallco 函数实现。
memcpy(buffer,vp1,size);
memcpy(vp1,vp2,size);
memcpy(vp2,buffer,size);
}
以上通过定义传入函数的内存块大小(size),实现内存块的内容互换。
但是使用泛型的危害在于,你可以实现如下不会编译报错的交换:
short x = 7;
int y = 44;
swap( &x, &y, sizeof(short));
编译不会报错,但是在大端模式下就会出现强制类型转换错误,得不到想要的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值