CSAPP 练习题 2.25

 

#include<stdio.h>

float sum_elements(float a[], unsigned length) {
  int i;
  float result = 0;
  for (i = 0; i <= length-1; i++) {
     result += a[i];
  }
  return result;
}

int main() {
  float a[0];
  printf("array sum: %f\n", sum_elements(a, 0));
}

 调整代码后:

/* Practice problem 2.25 on page 119
 * There's a subtle error in this code due to implicit casting and using unsigned data type.
 */
#include<stdio.h>

float sum_elements(float a[], unsigned length) {
  int i;
  float result = 0;
  // Issue is here due to usage of length-1 which leads to "underflow" to the unsigned int max number! 
  // for (i = 0; i <= length-1; i++) {
  // correct version (another alternative is to declare length as int)
  for (i = 0; i < length; i++) {
     result += a[i];
  }
  return result;
}

int main() {
  float a[0];
  printf("array sum: %f\n", sum_elements(a, 0));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值