一个关于指针的问题,问题很简单,但容易出错,希望大家提出好的解决方法~~~

来源:互联网 发布:手机淘宝好评修改 编辑:程序博客网 时间:2024/05/21 22:34

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
#define NUM_SIZE 10

int main()
{
  int arrayInt[NUM_SIZE];
  int int_Min=0,int_Max=0;
  int array_0=0,array_size=0;
  time_t t;

  int *intPtrMax=arrayInt;
  int *intPtrMin=arrayInt;
  srand((unsigned)time(&t));
  int i=0;
 // for(i=0;i<NUM_SIZE;i++)
  //{
  //  scanf("%d",&arrayInt[i]);
// getchar();
//  }
  int j=0;
  for(j=0;j<10;j++)
  {
   for(i=0;i<NUM_SIZE-1;i++)
   {
     arrayInt[i]=rand()%100;
   }

   printf("/n原始数据:");
   for(i=0;i<NUM_SIZE;i++)
   {
    printf(" %d ",arrayInt[i]);
   }
   printf("/n");
   for(i=1;i<NUM_SIZE;i++)
   {
  if(arrayInt[i]>*intPtrMax)intPtrMax=arrayInt+i;
     else
    {
      if(arrayInt[i]<*intPtrMin)intPtrMin=arrayInt+i;
     }
   }

  //交换数据,、有必要先把两个最值保存起来,否则出现差错,如可以对数组a10:1进行分析
  //将数组第一个和最后一个、最小值最大值预存起来很有必要,虽然耗费空间,但能保证准确性和可读性!
  //此intMinPtr.intMaxPtr指针只表示地址,由于最大值可能在数组第一个位置上,最小值可能在数组最后一个位置上,因而在
   //进行交换的时候,数组第一个位置的值和最小值交换了,但此时intPtrMax仍然指向它,即指向了最小值,再进行最大值和最后一个位置的数组交换时,
   //肯定会出错的

  int_Min=*intPtrMin;
  int_Max=*intPtrMax;
  printf("Min:%d   Max:%d",int_Min,int_Max);

  array_0=arrayInt[0];
  array_size=arrayInt[NUM_SIZE-1];
 
  //int temp=0;

  *intPtrMin=array_0;
  arrayInt[0]=int_Min;

  *intPtrMax=array_size;
  arrayInt[NUM_SIZE-1]=int_Max;

  printf("/n结果数据:");
  for(i=0;i<NUM_SIZE;i++)
  {
    printf(" %d ",arrayInt[i]);
  }
  printf("/n");
  Sleep(1000);
  printf("/n");
  }

  system("pause");
}