#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 sort(int arr[],int n)\\sorting function
не является началом определения функции, за которым следует комментарий! Поскольку вы используете<conio.h>
, вы должны быть в Windows, поэтомуvoid main()
допустимо, но лучше использоватьint main(void)
илиint main(int argc, char **argv)
при использовании аргументов командной строки. - person Jonathan Leffler   schedule 11.04.2014<type> array[size];
и передаемarray
, подразумевается сам объявленный массив, а не&array[0]
. это означает, что передается не дубликатarray
, а указатель на его первый элемент - person mangusta   schedule 11.04.2014pass by reference
, в C нет ничего, кромеreference
, вы можете сказатьpassed as pointer
. Как пытается объяснить self, в C существует только передача по значению. - person Don't You Worry Child   schedule 11.04.2014passed as pointer
описывает это лучше - person mangusta   schedule 11.04.2014