看《高质量程序设计(第二版)》遇到的几个问题

针对《高质量程序设计(第二版)》中提出的四个问题进行讨论:for循环转换为while循环时可能产生的死循环问题;两种for循环实现方式的效率对比及应用场景;通过指针修改变量值的效果;以及ADT和UDT的概念解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近正在看《高质量程序设计(第二版)》看了一部分其中有几个问题不是很明白:
问题一:P128  for循环变换成while循环
for(循环控制变量的初始化表达式;
    循环控制条件表达式;
    循环控制变量修改语句)
   {语句序列}
变为:
循环控制变量的初始化语句;
while(循环控制条件表达式)
     {
      if(循环控制变量不等于其初始值)
         修改循环控制变量;
      语句序列;
     }
这样的话由于第一次进入循环的时候循环控制变量的值等于初始值,循环控制变量就不会改变,以后每次都不
会改变了,不就变成死循环了?
问题二:P110  两种for循环的效率
for(i=0;i<N;i++)
{
   if(condition)
     DoSomething();
   else
     DoOtherthing();
}

if(condition)
{
   for(i=0;i<N;i++)
      DoSomething();
}
else
{
   for(i=0;i<N;i++)
      DoOtherthing();
}
比较,书上说第一种打断了流水线作业,在N很大的时候第二种效率更高
我总觉得这两段程序就不是一个功能
如果 condition 中的内容与 i 有关,比如是根据 i 的奇偶性来执行不同操作怎么办?第二段程序做不到啊
问题三:P140 
double* func (double *p)
{
   return p;
}
double d=100;
*func(&d) = 200; 这种使用方式不好,含义不清楚,我就想问一下,这句应该等价于 d=200 吧?
问题四:书中多次提到的 ADT、UDT是什么(好像是指数据类型)
UDT是 user define type 么
那么ADT呢?
麻烦诸位了,多谢!!!
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值