#include <stdio.h>
#include "stdafx.h"
#include <iostream>
using namespace std;
float sum_elements(float a[], unsigned length) {
int i;
float result = 0;
cout << length << endl;
cout << length - 1 << endl;
for (i = 0; i <= length - 1;i++) {
result += a[i];
}
return result;
}
int main() {
float a[] = {1.1,2,2.3,3.4};
cout << sum_elements(a, 0) << endl;
}
返回结果
可以发现length - 1=4294967295,原因是length的类型是unsigned 但是1的类型是是int,所以计算转为无符号数计算,length - 1=length +(- 1),现在的问题是-1的无符号数是多少-1的十六进制无符号数为0xFFFFFFFF换算之后是4294967295,所以代码就出现了异常,for循环进去之后数组下标越界。
修改为
#include <stdio.h>
#include "stdafx.h"
#include <iostream>
using namespace std;
float sum_elements(float a[], int length) {
int i;
float result = 0;
cout << length << endl;
cout << length - 1 << endl;
for (i = 0; i <= length - 1;i++) {
result += a[i];
}
return result;
}
int main() {
/*float a[] = {1.1,2,2.3,3.4};
cout << sum_elements(a, 0) << endl;*/
unsigned int a = 50;
unsigned int b = 100;
printf("%u", a - b);
}