我无法弄清楚我对这个程序做错了什么。我试图打印出数组中最大值的地址,但我不断得到数组中第一个值的地址。我很确定for循环中的问题,但我无法弄清楚到底在哪里。下面是代码:
#include <stdio.h>
int *Largest(int *array, int size);
int main (void)
{
int* Z;
int A[10] = {3,53,52,6,2,8,3,6454,232,88};
Z = Largest(A, 10);
printf("The address of the largest Value is: %d", Z);
}
int* Largest(int *array, int size)
{
int i;
for (i=0; i++; i<size)
{
if (*(array+i) > *array)
*array = *(array+i);
}
return array;
}
答案 0 :(得分:2)
这里有两个问题:
i++
将评估为false)。相反,跟踪另一个指针,并按照以下方式执行:
int i;
int *largest = array;
for( i = 1; i < size; ++i )
{
if( array[i] > *largest ) largest = &array[i];
}
return largest;
如果您坚持使用纯指针算术解决方案,请尝试以下方法:
int *end = array + size;
int *largest = array;
for( ; array != end; ++array )
{
if( *array > *largest ) largest = array;
}
return largest;
编辑:正如评论中所指出的,您还有错误的printf
说明符用于显示地址。请改用%p
:
printf("The largest Value is: %d", *Z);
printf("The address of the largest Value is: %p", Z);