将数组传递给C语言的排序函数

sdv*_*dsa 0 c arrays sorting algorithm selection-sort

#include<stdio.h>
#include<conio.h>

float smallest(int arr[],int k,int n);
void sort(int arr[],int n);

void main()
{
 int arr[20],i,n,j,k;
 clrscr();
 printf("\nEnter the number of elements in the array: ");
 scanf("%d",&n);

 printf("\nEnter the elements of the array");
 for(i=0 ; i < n ; i++)
 {
  printf("\n arr[%d] = ",i);
  scanf("%d",&arr[i]);
 }

 sort(arr,n);
 printf("\nThe sorted array is: \n");
 for(i=0 ; i < n ;  i++)
 printf("%d\t",arr[i]);
 getch();
}

int smallest(int arr[],int k,int n)//smallest function
{
 int pos=k,small=arr[k],i;
 for(i=k+1;i<n;i++)
 {
  if(arr[i]<small)
  {
   small=arr[i];
   pos=i;
  }
 }
 return pos;
}


void sort(int arr[],int n)//sorting function
{
 int k,pos,temp;
 for(k=0 ; k < n ; k++)
  {
   pos=smallest(arr,k,n);
   temp=arr[k];
   arr[k]=arr[pos];
   arr[pos]=temp;
  }
}
Run Code Online (Sandbox Code Playgroud)

在上面的程序中,sort函数是从main调用的,但返回类型sort是void,它仍然返回已排序的数组.在排序数组之后,函数应该将已排序的数组返回给调用函数以打印已排序的数组,但程序运行完美.这是怎么回事?

Tob*_*obi 5

当你申报时

int arr[20];
Run Code Online (Sandbox Code Playgroud)

你可以说"arr是一个由20个整数组成的数组".但是arr也是指向整数的指针,指向20行中的第一个整数.因此,取消引用*arr是一个整数,与实际相同arr[0].

这意味着当您传递arr给函数时,您只传递指向该函数的指针.这种情况下的函数适用于(复制的)指针.但是这个指针指向与原始arr声明相同的内存main().这就是为什么操纵的原因arrsort(),其实是操纵arrmain().