2016-03-27 4 views
1

1) Können wir ein statisches Array übergeben, das in einer Funktion definiert ist (sagen wir fun1()), um fun2() zu sagen? Wenn ja, was sind dann tatsächliche und formale Parameter?Übergeben eines statischen Arrays als Argument

2) Wenn ein statisches Array als Argument übergeben werden kann, wie wird es dann im Fall einer rekursiven Funktion ausgeführt?

P. S Ich benutze C

+1

, dass ein Array statisch ist spielt keine Rolle, übergeben Sie es wie jedes andere Array. Denken Sie jedoch daran, dass wenn Sie ein Array an eine Funktion übergeben, es zu einem Zeiger auf sein erstes Element zerfällt. Wenn Sie also die Anzahl der Elemente im Array benötigen, müssen Sie es auch übergeben. –

+0

Wie nennt man ein "statisches" Array? 'static' ist ein C-Schlüsselwort und es scheint mir, dass Sie etwas anderes meinen, wenn Sie dieses Wort verwenden. Vielleicht, was Sie fragen, bezieht sich auf: http://stackoverflow.com/questions/27755446/reference-to-array-vs-reference-to-array-pointer – jdarthenay

+0

Bitte geben Sie einen Code. – Harry

Antwort

-1

Ja, können Sie statische Array in Funktion zu einer anderen Funktion definiert passieren. Aktueller Parameter ist ein statisches Array, aber der formale Parameter ist ein nicht statisches Array, als wäre es statisch nicht sinnvoll (Statische Arrays werden bei der Kompilierung Speicher zugewiesen und der Speicher wird auf dem Stack zugewiesen).

Und im Falle rekursiver Funktion als statisches Array ist in Stack es wird in rekursiven Aufrufe aktualisiert (wenn wir es aktualisieren) ist sein Geltungsbereich Lebensdauer des Programms.

#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; 
} 

Ausgang:

+0

'statische' Arrays werden typischerweise * nicht * auf dem Stack zugewiesen. 'Auto'arrays sind. Tatsächlich liegt es an der Compiler-/Linker-Suite *, wo * Zeug abgelegt wird. Die Speicherklasse stellt nur einige Anforderungen da - * wie * sie erfüllt sind, ist Sache des Compilers. – tofro

+0

atleast google vor dem Kommentieren [link] (http://stackoverflow.com/questions/2672085/c-static-array-vs-dynamic-array) [link] (https://www.quora.com/Where-) -the-arrays-in-C-gespeichert-in-einem-Stapel-oder-ein-Heap) – Vimal

+0

Sie sind so richtig. Aber dann verstehe * was du liest. Die angegebenen Links sprechen von * statisch großen * Arrays im Vergleich zu * dynamisch großen * Arrays, nicht von 'statischen tofro