문제

#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 void이고 여전히 정렬된 배열을 반환합니다.배열을 정렬한 후 함수는 정렬된 배열을 인쇄하기 위해 호출 함수로 다시 정렬된 배열을 반환해야 하지만 프로그램은 완벽하게 실행됩니다.어떻게 그런 일이 일어나고 있나요?

도움이 되었습니까?

해결책

선언할 때

int arr[20];

"arr은 20개의 정수로 구성된 배열입니다"라고 말할 수 있습니다.그러나 arr은 정수에 대한 포인터이기도 하며 20행의 첫 번째 정수를 가리킵니다.따라서 역참조 *arr 는 정수이며 다음과 같습니다. arr[0] 사실은.

통과할 때를 의미합니다. arr 함수에는 해당 함수에 대한 포인터만 전달합니다.이 경우 함수는 (복사된) 포인터에서 작동합니다.하지만 이 포인터는 원본과 정확히 동일한 메모리를 가리킵니다. arr 에서 선언 main().그리고 그게 조작하는 이유야 arr ~에 sort() 실제로 조작하고 있다 arr ~에 main().

다른 팁

배열을 매개 변수로 전달할 때이

int smallest(int arr[],int k,int n)
.

와 정확히 동일한 것을 의미합니다.
int smallest(int *arr,int k,int n)
.

예 :

#include<iostream>
void printArray(int data[])
{
  for(int i = 0, length = sizeof(data); i < length; ++i)
  {
    std::cout << data[i] << ' ';
  }
  std::cout << std::endl;
}

int main()
{
  int data[] = { 5, 7, 8, 9, 1, 2 };
  printArray(data);
  return 0;
}
.

배열의 첫 번째 4 요소 만 인쇄됩니다.sizeof(data)는 4의 값을 반환합니다!printArray()에 어레이를 전달하는 데 사용되는 포인터의 크기는 일어납니다. 먼저 배열이 복사되지 않습니다.배열의 첫 번째 요소에 대한 포인터가 복사됩니다

첫째, 함수 인수 사이에는 연결이 없거나 전달되지 않습니다. return 함수의 반환 유형에 따른 표현식이 포함된 명령문입니다.

C에서 전달되는 모든 매개변수는 값에 따라 전달되는 것이 사실이지만 값을 "로컬 매개변수 변수"에 복사합니다. 메모리 위치 a에서 어떤 일이 발생할지에 대해서는 아무 것도 가정되지 않습니다. 바늘 참고하고 있습니다.따라서 함수는 값을 반환하지 않고도 호출 환경을 변경할 수 있습니다.

다음과 같이 선언된 매개변수에 대해 aType name[].이것은 단지 구문상의 설탕일 뿐입니다. const aType* name.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top