【发布时间】:2020-12-29 00:21:44
【问题描述】:
我试图用 C 语言编写一个看似微不足道的函数来获取整数数组中的最大值。我正在尝试使用指针来获得更好的理解。 (我知道如何通过数组的大小来做到这一点,问题不是如何以另一种方式做到这一点)
#include <stdio.h>
int gimme_largest(int *, int *);
int main(void)
{
int arr[] = {1, 22, 3, 44, 5};
int largest;
printf("In main, arr:\t\t\t %p \n", arr);
printf("In main, arr + sizeof(arr):\t %p\n", arr + 5);
putchar('\n');
largest = gimme_largest(arr, arr + sizeof(arr));
// printf("\n\nThe largest is %d", largest);
return 0;
}
int gimme_largest(int *a, int *lastPlusOne)
{
int largest = *a; // let's assume the first element is the largest one
printf("In gimme_largest, a:\t\t %p\n", a);
printf("In gimme_largest, a + 5:\t %p\n", a + 5);
printf("In gimme_largest, lastPlusOne:\t %p\n", lastPlusOne);
while (a < lastPlusOne) {
if (*a > largest)
largest = *a;
a++;
}
return largest;
}
问题是lastPlusOne在调用函数中不等于a + 5,而是更高的地址;不明白为什么会这样。
【问题讨论】:
-
arr + sizeof(arr)错误。 -
sizeof(arr) 是多少?
标签: arrays c pointers pointer-arithmetic function-definition