【发布时间】:2014-05-25 03:01:49
【问题描述】:
#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;
}
}
在上面的程序中,排序函数是从 main 调用的,但 sort 的返回类型是 void,它仍然返回排序后的数组。在对数组进行排序后,该函数应将排序后的数组返回给调用函数以打印排序后的数组,但程序运行良好。这是怎么回事?
【问题讨论】:
-
你将数组传递给函数,函数直接作用于该数组,因为 C 中的数组是通过引用传递的。它不返回任何东西,而是对传递给它的参数起作用
-
@mangusta 数组不是通过引用传递的。
-
@mangusta 错了,一切都是按值传递的。数组衰减为指针。你不能传递一个函数,只能传递一个函数pointer.
-
@mangusta: 你不能说
pass by reference,C 中没有reference那样的东西,你可以说passed as pointer。正如 self 试图解释的那样,在 C 中只有按值传递。 -
@all 任何人都可以发布正确答案吗?请。我认为如果数组是通过引用传递的,那么正如 mangusta 所说,不需要返回
标签: c arrays algorithm sorting selection-sort