質問

#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で、ソートされた配列を返します。配列を並べ替えた後、関数はソートされたアレイを呼び出し側関数に戻してソートされた配列を印刷する必要がありますが、プログラムは完全に実行されます。それはどうですか?

役に立ちましたか?

解決

宣言するとき

int arr[20];
.

「ARRは20整数の配列である」と言える。しかし、ARRは整数のポインタでも、20の行の最初の整数を指しています。

これは、*arrを関数に渡すと、その関数へのポインタだけを渡します。この場合の関数は(コピー)ポインタで動作します。しかし、この非常にポインタポインタは、arr[0]で宣言されている元のarrと同じメモリを正確にポイントします。それがarrmain()を操作する理由は、実際にarrsort()を操作します。

他のヒント

アレイをパラメータとして渡す場合、この

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 POINTER は何も想定されていません。参照。したがって、関数は、値を返すことなく、呼び出し環境の変更を加えることができます。

aType name[]として宣言されているパラメータについて説明します。これはconst aType* nameのための単なる構文砂糖です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top