C中数组的最大最小值(带指针)

时间:2016-11-29 20:12:06

标签: c arrays pointers

我有一个问题,当我运行它时,最小和最大不能正常显示。 有什么建议? 我必须让范围出现。 我用指针试了一下。 练习可以肯定地完成,但我想用这种方式理解我的错误。

#include <stdio.h>
#include "simpio.h"
#include "genlib.h"

int readArray(int array[100]);

main()
{
  int array[100], i, size, *min, *max;

  printf("Enter the elements of the array, one per line.\n");
  printf("Use -1 to signal the end of the list.\n");

  readArray(array);

  min = array;
  *min = *array;

  for (i=1; i<size; i++)
  {
    if ( *(array+i) < *min )
    {
      *min = *(array+i);
    }
  }
  max = array;
  *max = *array;

  for (i=1; i<size; i++)
  {
    if ( *(array+i) > *max )
    {
      *max = *(array+i);
    }
  }

  printf("The range of values is %d-%d \n", *min, *max);

  system("pause");
}

int readArray(int array[100])
{
  int i, size;
  size = 0;

  for (i=0; i<100; i++)
  {
    printf("? ");
    array[i] = GetInteger();
    size += 1;
    if (array[i] == -1) {break;}
  }
  for(i=0; i<size-1; i++)
  {
    printf("%d ", array[i]);
  }
  printf("\n");

  printf("\n");
}

1 个答案:

答案 0 :(得分:1)

您正在覆盖*min处的值,这是数组中的第一个值。你想要的是制作一个指向值的指针,因此你真正需要的是

min = array;

min = array + i;

min = &array[i]

*运算符取消引用指针,在打印之前,您不想这样做。您可以使用minmax指针指向数组中的任何位置,例如,您可以设置const以防止意外写入到指定时间指向的位置。

以下是根据您自己的代码构建的示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int readArray(int *array, int size);

int
main(void)
{
    int array[100], i, *min, *max;

    srand(time(NULL));

    printf("Enter the elements of the array, one per line.\n");
    printf("Use -1 to signal the end of the list.\n");

    readArray(array, 100);

    min = array;
    max = array;
    for (i = 1; i < 100 ; i++) {
        if (*(array + i) < *min)
            min = array + i;
        if (*(array + i) > *max)
            max = array + i;
    }
    printf("The range of values is %d-%d \n", *min, *max);
}

int 
readArray(int *array, int size)
{
    for (int i = 0 ; i < size ; i++)
        array[i] = 1 + rand() % 100;
    for (int i = 0 ; i < size ; i++)
        printf("%d ", array[i]);
    printf("\n");
    printf("\n");
    return 0;
}