【解決方法】C で配列を返す関数


関数があり、すべての要素を印刷して変更する方法を知っています。印刷せずにインデックスで配列を返すにはどうすればよいですか? または、たとえば return arr 専用の関数をもう 1 つ作成します。 [3]

私が試したこと:

void a(int arr[]、int arr_el、int i)
{
printf(“%d\n”, arr[i]);
}

intメイン(){
int arr[3] = {24, 6, 18};
int arr_el=3;
int i;
();

解決策 1

試す:

C
int* returnArray(int arr[])
   {
   ...
   return arr;
   }
   
int main()
{
    printf("Hello World\n");
    int a[3] = {1, 3, 5};
    int *b = returnArray(a);
    printf("%d\n", b[1]);
    return 0;
}

配列とポインターは非常に似ています。配列の名前は、(言語定義によると) 最初の要素へのポインターです。
したがって、配列がある場合は、それをポインターのように扱うことができ、その逆も同様です。

解決策 2

配列の項目を 1 つだけ返すのは非常に簡単です。

C++
#include <stdio.h>                                                                                                     #include <stdlib.h>                                                                                                                                                                                                                             int get_item( int a[], size_t size, size_t index)                                                                       {                                                                                                                         
  if ( index < size )                                                                                                       
    return a[index];                                                                                                      
  else                                                                                                                      
    return 0; // there is actually no meaningful way to signal the error                                                          }                                                                                                                                                                                                                                               
int main()                                                                                                              {                                                                                                                         
  int arr[] = {1, 42, -12};                                                                                               
  printf("arr[%u] = %d\n", 1, get_item(arr, 3, 1));                                                                       
  return 0;                                                                                                             }                                                                                                                       

解決策 3

次の方法で配列を返すことができます。

C++
int* getArray() {
  int *array = malloc( 5 * sizeof(int));
  // do stuff with that array
  return array
} 

重要: 返された配列にはメモリ管理が必要なので、完了したら free を使用してください。 新規および無料についてお読みください。

注: C++ には、ベクトルのような組み込み配列があります。

コメント

タイトルとURLをコピーしました