关于指针的相关自我摸索

#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_value=0,array_size_value=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_value=arrayInt[0];
  array_size_value=arrayInt[NUM_SIZE-1];

  //第一个数据和最小值交换
  *intPtrMin=array_0_value;
  if(array_0_value==int_Max)intPtrMax=intPtrMin;//由于第一个数据可能是intPtrMax指向的,交换后,intPtrMax必须紧跟着最大值跑
  arrayInt[0]=int_Min;
  intPtrMin=&arrayInt[0];//intPtrMin紧跟着最小值跑
 
  printf("/n最小值和第一个位置交换/n");
  for(i=0;i<NUM_SIZE;i++)
  {
    printf(" %d ",arrayInt[i]);
  }


  if(*intPtrMax!=array_size_value)
  {/*1*/
  *intPtrMax=array_size_value;
  arrayInt[NUM_SIZE-1]=int_Max;
  printf("/n最大值和最后位置数据交换/n");
  for(i=0;i<NUM_SIZE;i++)
   {
    printf(" %d ",arrayInt[i]);
   }
  }//end if /*1*/

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

  system("pause");
}
//总之,归结到最简单的指导思想就是一句话:intPtrMax始终指向最大值,intPtrMin始终指向最小值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值