写得很深,很好,赞赞赞!!! 不过里面也有一些瑕疵哦: 1. 在“ 试题3:写一个“ 标准”宏MIN... ”中写道:“ 宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果是:   ((*p++) <= (b) ? (*p++) : (*p++))   这个表达式会产生副作用,指针p会作三次++自增操作。 ”————————这里应该是 ((*p++) <= (b) ? (*p++) : (b)),两次自加吧? 2. 这题有三处瑕疵: (1)参数检查:传入的参数如果按照原意设置为int,根据题意非负整数应该是无意义的,并没有做任何检查或出错处理。 (2)返回值类型:根据题意返回值可能为1~LONG_MAX(长整形变量的最大值,见limits.h),而当前很多实现中规定了long表示的范围应该不小于int,但int和long在扩展方面并不等价,因此返回值类型应该设置为long更合理。 (3)计算过程中类型不精确:虽然用了long进行强制转换,但是long还远远不够。我们可以反推,最后结果可能达到LONG_MAX,因此(1+n)* n <= 2 *  LONG_MAX,而参数仍然是int,故计算结果仍然是int的范围,虽然上面的代码改为了long,但还是同样的范围,因此此处建议强制转换为ULONG_MAX类型。 我的拙见发表完毕!敬礼!淼姐棒棒哒~
点赞 1

相关推荐

点赞 评论 收藏
转发
牛客网
牛客企业服务