简单排序 指针用法的疑惑

来源:百度知道 编辑:UC知道 时间:2024/06/09 08:13:35
#include<stdio.h> //简单排序,就考虑升序,范围从i=1->n,
//每次从i到n中选出最小的数和a[i]进行交换

void Exchange(int *a, int *b)
{
int temp =-100;
temp=*a;
*a=*b;
*b=temp;
return;
}

void PT(int a[7]) //从a[1]到a[6]表示
{
int i=0;
for(i=1;i<=6;i++)
{
printf("%d ",a[i]);
}
}

void main()
{
int i,j,min=-1,pos=-1;
int a[7]={-1,2,45,13,33,56,1};
i=j=0;

for(i=1;i<=6;i++)
{
min=a[i],pos=i;
for(j=i;j<=6;j++)
{
if(min>a[j]) min=a[j], pos=j;
}
if(pos!=i)
//Exchange(&a[i],&a[pos]); 这句是对的
Exchange(&a[i],&min); //为什么用这句就不对呢
}

PT(a);
}

"//Exchange(&a[i],&a[pos]); 这句是对的
Exchange(&a[i],&min); //为什么用这句就不对呢"
这两句语法都是对的,与指针没有关系。第一句的意思是a[pos]是最小值,交换i与pos位置的元素(即使位置i为最小值,将i位置的值赋给pos位置);而第二句的意思是将最小值赋给a[i],将a[i]中的值交换到min。两句区别就在于赋给min的值并没有赋值到a[pos],因为min只是个临时变量,跟数组没有丝毫关系。如果min是一个指向数组元素的指针,int *min=&a[pos];那么Exchange(&a[i],min); 交换的话就是一样的了。

#include<stdio.h> //简单排序,就考虑升序,范围从i=1->n,
//每次从i到n中选出最小的数和a[i]进行交换

void Exchange(int *a, int *b)
{
int temp =-100;
temp=*a;
*a=*b;
*b=temp;
return;
}

void PT(int a[7]) //从a[1]到a[6]表示
{
int i=0;
for(i=1;i<=6;i++)
{
printf("%d ",a[i]);
}
}

void main()
{
int i,j,*min,pos=-1; //将min定义为指针
int a[7]={-1,2,45,13,33,56,1};
i=j=0;

for(i=1;i<=6;i++)
{
min=&a[i];
for(j=i;j<=6;j++)
{
if(*min>a[j]) min=&a[j];
}
if( &a[i] != min)