请看如下代码:
今天在写求十个数中最大值的问题,我用了遍历的方法,但出现了如下问题。
#include <stdio.h>
#include <string.h>
int main() {
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int number = sizeof(arr);
int max = arr[0];
printf("%d\n", number);
for (int i = 1; i < number; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
printf("%d\n", max);
return 0;
}
大家猜猜它的输出为多少?
可以看到结果非常糟糕。
这是因为一个int 的字节为4,arr中有10个数,所以arr总占字节共40. 而sizeof求的正好是它的字节长度。看清了如此问题,修改就很方便了,下面展示两种方法进行修改:
#include <stdio.h>
#include <string.h>
int main() {
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int number = sizeof(arr) / sizeof(arr[0]);//sizeof(int)
int max = arr[0];
printf("%d\n", number);
for (int i = 1; i < number; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
printf("%d\n", max);
return 0;
}
可以看到运行结果非常正确!