do while妙用:

目录

 

问题来源:

代码分析

结束


问题来源:

大家都知道:

do语句:
    do语句先执行后判断,循环体至少执行一次
    for/while语句先判断后执行

在平常的使用中我们也一般只用for/while循环,do语句鲜有用到,那么是否do while语句真的完全可以用for/while代替,毫无用处那?

代码分析

我们来看一段代码code:

int func(int n)
{
	int i = 0;
	int ret = 0;
	int* p = (int*)malloc(sizeof(int) * n); //分配资源
	do
	{
		if(NULL == p) break;
		
		if(n < 0) break;
		
		for(i=0; i<n; i++)
		{
			p[i] = i;
			printf("%d\n", p[i]);
		}
		
		ret = 1;
	}while(0);
	
	free(p); //释放资源
	
	return ret;
}

这段代码理解很简单,就是给一片动态申请的内存赋值,如果没有申请成功则返回,如果n<0也返回。

我们平常写这段代码会怎么写哪?没有对比就没有伤害吗,哈哈。我们一般会像这样写:

int func_compare(int n)
{
	int i = 0;
	int ret = 0;
	int* p = (int*)malloc(sizeof(int) * n); //分配资源

	if(NULL == p) 
	{	
		free(p); //释放资源(第1次)
		
		return 0;
	}
	
	if(n < 0)
	{
		free(p); //释放资源(第2次)
		
		return 0;
	}
	
	for(i=0; i<n; i++)
	{
		p[i] = i;
		printf("%d\n", p[i]);
	}
	
	free(p); //释放资源(第3次)
	
	return 1;
}

可以看到在第二种写法中我们free了3次,如果不free就会造成内存泄漏;

而在第一种方法中我们只free了一次,这样内存就统一分配、统一释放;

很显然第一种方法更好,在这里我们就巧妙的使用了一个do...while(0)解决了这个问题!!!

结束

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值