2016-03-27 14 views
1

1)ある関数(例えばfun1())で定義された静的配列をfun2()に渡すことはできますか?はいの場合、実際のパラメータと正式なパラメータは何ですか?静的配列を引数として渡す

2)静的配列を引数として渡すことができる場合は、再帰関数の場合はどうすればよいですか?私はC

+1

配列が静的であることは、あなたが他の配列として渡し、重要ではありません。しかし、関数に配列を渡すとき、その最初の要素へのポインタに減衰するので、配列の要素の数が必要な場合はそれも渡す必要があることに注意してください。 –

+0

「静的」配列とは何ですか? 'static'はCのキーワードであり、あなたがこの単語を使用するときは何か他のものを意味するようです。たぶんあなたが尋ねるものは、関連している:http://stackoverflow.com/questions/27755446/reference-to-array-vs-reference-to-array-pointer – jdarthenay

+0

いくつかのコードを入力してください。 – Harry

答えて

-1

はい、あなたは別の関数に関数内で定義された静的配列を渡すことができますを使用しています

P.S。実際のパラメータは静的配列ですが、仮パラメータは静的でないかのように非静的配列です()。静的配列はコンパイル時にメモリに割り当てられ、メモリはスタックに割り当てられます)。

静的配列がStackにあるような再帰的な関数の場合、再帰呼び出し(更新した場合)の範囲はプログラムの有効期間です。

#include <bits/stdc++.h> 
using namespace std; 
void fun2(int arr[],int i){ 
    if(i==3)return ; 
    arr[0]=i; 
    fun2(arr,i+1); 
    } 
void fun1(){ 
    static int sarr[]={99}; 
    cout<<sarr[0]<<endl; 
    fun2(sarr,0); 
    cout<<sarr[0]<<endl; 
    } 
int main() { 
    fun1(); 
    return 0; 
} 

出力:

+0

'static'配列は典型的なものです*スタックには*割り当てられません。 'auto'配列があります。実際、* stuffが置かれているのはコンパイラ/リンカスイート*です。ストレージクラスは、そこにいくつかの要件を置いています。*どのように実現されるかは、コンパイラによって異なります。 – tofro

+0

コメントする前にgoogleより[リンク](http://stackoverflow.com/questions/2672085/c-static-array-vs-dynamic-array)[リンク](https://www.quora.com/Where-are -the-C-array-in-a-stack-or-a-heap) – Vimal

+0

あなたはそうです。しかし、あなたが読んでいることを理解する*。あなたが提供したリンクは、静的に*割り付けられた配列ではなく、*静的に大きさの*配列と*動的に配列された*配列について述べています。最初のものは完全にC++でさえ、ここでは無効にします。その後、OP質問に戻り、 "C"タグを認識して、答えを確認します。私はその後、私の投票を再考するかもしれません。 (2番目のリンクは、「静的なキーワードで宣言されていない関数内で宣言された静的なサイズの配列で、グローバルな**になります)、スタックに配置されます。 " – tofro

関連する問題