指针和函数调用

时间:2016-04-13 22:34:07

标签: c arrays pointers

我无法弄清楚我对这个程序做错了什么。我试图打印出数组中最大值的地址,但我不断得到数组中第一个值的地址。我很确定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;
}

1 个答案:

答案 0 :(得分:2)

这里有两个问题:

  1. 您正在修改数组本身的值(不跟踪指针),然后只返回原始指针。
  2. 您的循环是向后的,永远不会执行(因为初始值为0的终止条件i++将评估为false)。
  3. 相反,跟踪另一个指针,并按照以下方式执行:

    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);