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

标签 c arrays algorithm sorting 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;
  }
}

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

最佳答案

当你声明

int arr[20];

你可以说“arr 是一个包含 20 个整数的数组”。但是 arr 也是一个整数指针,指向 20 行中的第一个整数。所以取消引用 *arr 是一个整数,与 arr[0] 事实上。

这意味着当您将 arr 传递给一个函数时,您只传递了一个指向该函数的指针。本例中的函数作用于(复制的)指针。但是这个指针指向与您在 main() 中声明的原始 arr 完全相同的内存。这就是为什么在 sort() 中操作 arr 实际上是在 main() 中操作 arr 的原因。

关于c - 将数组传递给C语言中的排序函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23004412/

相关文章:

c++ - 混合 C 和 C++ 时不断出现 LNK2019 错误

java - 非面向对象方法引入面向对象方法有什么问题

C管道: Bad file descriptor

java - 通过数据库或算法比较不同日期的两个对象

Java - Dekkers 算法实现导致临界区中有两个线程

c - 如何用变量指定字段宽度?

java - REST Assured - 通用列表反序列化

c++ - 我的二维数组太大了吗?

php - 循环遍历多维数组

python - Python 中的模糊 URL 匹配