using arrays with functions c
C ++の関数を持つ配列について知っておくべきことはすべて:
このチュートリアルでは、C ++の関数で配列を使用する方法について説明します。一般に、配列は、変数を関数に渡すのと同じ方法で、引数として関数に渡すことができます。
ただし、配列に関しては、仮パラメータの評価が少し異なります。関数への配列の受け渡しを実際に検討する前に、配列へのポインターの概念について簡単に説明する必要があります。
=> ここで詳細なC ++トレーニングチュートリアルを確認してください。
学習内容:
配列へのポインタ
フィボナッチ数列の最初の5つの数を含む次の配列について考えてみます。
int fibSeq(5) = {1,1,2,3,5};
この配列を指すポインタfibPtrを宣言しましょう。
int* fibPtr; fibPtr = fibSeq;
fibPtrの内容を出力すると、出力はfibSeq配列の最初の要素になります。これは、角括弧のない配列の名前が、配列の最初の要素へのポインターに評価されるためです。したがって、上記の例では、名前「fibSeq」は配列「fibSeq」の最初の要素を指しています。
以下は同じものの絵の表現です:
上記の図に示されているように、fibPtrは配列の最初の要素を指します。したがって、ポインタ演算を使用すると、fibPtrを使用するだけで配列のすべての要素を出力できます。
例えば、 式*(fibPtr + 1)は、配列の2番目の要素を指します。
それはデスクインタビューの質問と回答のpdfを助けます
これをプログラムに入れて、「fibSeq」と「fibPtr」の出力を確認しましょう。
#include #include using namespace std; int main() { int fibSeq(5) = {1,1,2,3,5}; int* fibPtr; fibPtr = fibSeq; cout<<'
fibSeq points to :'<<*fibSeq; cout<<'
fibSeq(0): '<<*fibPtr; cout<<'
fibSeq(1): '<<*(fibPtr + 1); cout<<'
fibSeq(2): '<<*(fibPtr + 2); cout<<'
fibSeq(3): '<<*(fibPtr + 3); cout<<'
fibSeq(4): '<<*(fibPtr + 4); } }
出力:
fibSeqが指すもの:1
fibSeq (0):1
fibSeq (1):1
fibSeq (2):2
fibSeq (3):3
fibSeq (4):5
上記の例では、ポインター変数fibPtrを宣言し、配列の名前をfibPtrに割り当てて、配列を指すようにします。これを行うとき、fibPtrが配列の最初の要素を指すようにします。次に、fibPtrを使用して配列のすべての値を出力します。
関数への配列の受け渡し
関数を扱うときは、変数を関数に渡すのと同じ方法で配列を関数に渡します。ただし、タイプ()の配列変数は渡しません。
代わりに、配列へのポインタ、つまり配列の最初の要素を指す配列の名前を渡します。この場合、このポインターを受け入れる仮パラメーターは、実際には配列変数です。ポインタを渡すと、関数内の配列を直接変更できます。
フィボナッチ数列の最初の5つの要素の各要素の二乗を計算して、関数への配列の受け渡しを示す次のプログラムについて考えてみます。
#include #include using namespace std; void fibSeqSquare(int fibSeq()) { for(int i=0;i<5;i++) { fibSeq(i) *= fibSeq(i); } } int main() { int fibSeq(5) = {1,1,2,3,5}; fibSeqSquare(fibSeq); for(int i=0;i<5;i++) { cout<上記の例では、フィボナッチ数列の各要素の2乗を計算します。この二乗は関数内で計算されます。したがって、mainから関数を呼び出しながら、配列名を関数「fibSeqSquare」に渡します。関数内で、各要素の二乗を計算します。
ポインタを介して配列への参照を渡したので、関数内で配列に加えた変更はすべて、配列を反映します。したがって、main関数で配列を出力すると、各要素の2乗が出力として取得されます。
上記の例では、関数fibSeqSquareの配列引数(仮パラメーター)が配列のサイズを指定せず、配列であることを示す角かっこ(())のみを指定していることを確認しました。これは、配列引数を指定する1つの方法です。
仮パラメータリストで配列引数を指定する別の方法は、角括弧内に配列のサイズを指定することです。どちらの引数も同様に機能します。これらは、配列引数を指定する2つの方法にすぎません。
次の例は、sizeで指定されたArray引数を示しています。
#include #include using namespace std; void displayFibSeq(int fibSeq(5)) { for(int i=0;i<5;i++) { cout<上記の例には、フィボナッチ数列を表示する機能があります。この関数には、配列としてのパラメーターがあり、配列のサイズも指定しています。
上記と同じ方法で、多次元配列を関数に渡すこともできます。
最高の無料のYouTubeビデオダウンローダー
関数から配列を返す
関数から配列を返すことになると、C ++では関数から配列全体を返すことはできません。ただし、配列へのポインタを返す関数を作成することはできます。しかし、それには落とし穴があります。
次のコードについて考えてみます。
c ++入出力ファイル
int* funcArray() { int arr(3) = {1,2,3}; return arr; } int main() { int* aryPtr = funcArray(); cout< 上記のプログラムは、関数から配列の最初の要素へのポインタを返すだけですが、期待どおりに実行されません。プログラムが正しい出力を提供することを保証することはできません。正しい出力が得られる場合と得られない場合があります。
これは、関数からローカル変数を返しているため、返されるまでにスコープ内にあるかどうかわからないためです。
したがって、一言で言えば、C ++は関数から配列を返すことを好みません。
関数から配列を返す必要がある場合は、次のいずれかのメソッドを使用する必要があります。
#1)動的に割り当てられた配列を返す
動的に割り当てられた配列から配列ポインタを返すことができます。演算子「new」を使用して、配列を動的に割り当てます。動的配列であるため、配列を「削除」しない限り、スコープ内にあります。したがって、配列を返すと、プログラムは正常に実行されます。
これを次の例に示します。
#include #include using namespace std; int* funcArray() { int* arr = new int(3); arr(0)=1; arr(1)=2; arr(2)=3; return arr; } int main() { int* aryPtr = funcArray(); cout< 出力:
1 2 3
#2)静的配列を返す
静的変数/配列にはプログラム全体のスコープがあるため、関数から静的配列を返すこともできます。これを実証するために例をとることができます。これは前の例と同じですが、この例では動的に割り当てられた配列の代わりに静的配列を使用している点が異なります。
#include #include using namespace std; int* funcArray() { static int arr(3); arr(0)=1; arr(1)=2; arr(2)=3; return arr; } int main() { int* aryPtr = funcArray(); cout< 出力:
1 2 3
注意 :構造体を使用して配列をその中にラップし、その構造体を返すこともできます。このようにして、関数から配列を自然に返します。しかし、これは配列を返すための非常に実行可能な方法ではありません。
結論
したがって、このチュートリアルでは、関数に関して配列について詳しく説明しました。このチュートリアルが、C ++の配列と関数に関するすべての疑問と誤解を解消するのに役立つことを願っています。
=> ここで完璧なC ++トレーニングガイドをチェックしてください。
推奨読書