Rekursive Funktionsaufrufe operieren auf einem Array
-
Hey Leute,
habe ein Verständnisproblem bemerkt als ich mir diese Mergesort Implementation angeschaut habe: http://de.wikibooks.org/wiki/Algorithmen_und_Datenstrukturen_in_C/_Mergesort.
Ich versuch das mal mit diesem kürzeren Codebeispiel zu illustrieren.
#include <stdio.h> void inc_first_element(int liste[]){ if(liste[0] < 10){ liste[0]++; inc_first_element(liste); } } int main(int argc, char *argv[]){ int numbers[] = {1}; inc_first_element(numbers); printf("%d", numbers[0]); }
Was ich nicht verstehe ist warum die rekursiven Aufrufe auf dem gleichen Array operieren.(Denn offensichtlich wird das erste Element bis 10 hochinkrementiert). Eigentlich werden doch bei jedem Aufruf neue Stackframes erzeugt, in denen das Array als Argument abgelegt wird. Warum wird also immer auf der gleichen Zeichenkette im Speicher gearbeitet? Oder verhält sich ein Array wie ein Pointer?
Für Hilfe wäre ich dankbar.Grüße tm
-
themorrise schrieb:
Oder verhält sich ein Array wie ein Pointer?
Ja. Ganz wichtiges Thema in C. Unbedingt mal in einem Grundlagenbuch nachlesen, wie Arrays, Pointer und Funktionen miteinander arbeiten.