2016-10-03 6 views
-1

Ich bin nicht in der Lage zu verstehen, wie ich einen Müllwert in der Ausgabe bekomme. Kann mir jemand den Ablauf erklären. Vielen Dank .Drucken der Umkehrung eines Integer-Arrays mit Rekursion in C

#include <stdio.h> 

void rev(int *ptr){ 

    if(*ptr) { 
    rev(ptr+1); 
    printf("%d\n",*ptr); 

    } 
} 

int main(){  

    int arr[]={4,2,3,1,5}; 
    rev(arr); 
    return 0; 
} 

Ausgang -

32764 
5 
1 
3 
2 
4  

Antwort

2

Ihre Basisbedingung ist nicht korrekt. Sie rekursiv, bis eine 0 im Array gefunden wird, aber keine hat.

Sie haben vielleicht (falsch) angenommen, dass es nach dem Ende des Arrays eine 0 gibt. Aber das ist in C nicht wahr. Ihr Programm hat undefined behaviour gemäß C-Standard.

Wenn Sie das gesamte Array drucken müssen, dann auch die Größe passieren:

void rev(int *ptr, size_t size){  
    if(size) { 
     rev(ptr+1, --size); 
     printf("%d\n",*ptr); 
    } 
} 

int main(){ 

    int arr[]={4,2,3,1,5}; 
    rev(arr, sizeof arr/sizeof arr[0]); 
    return 0; 
} 
+0

Dank für die Hilfe :) – AuSm88

+0

so, technisch wird dies der für den Druck gut halten Umkehrung einer Zeichenkette, die mit '\ 0' endet – AuSm88

+0

@SpandanMishra Das stimmt. – usr

2

Ihr auf if (*ptr) unter Berufung 0 die Rekursion blockieren wird nicht gut enden. Arrays in C werden nicht automatisch mit Null abgeschlossen. Formal ist das Verhalten Ihres Programms undefined, da Sie versuchen werden, Speicher nach dem Ende des Arrays zu lesen.

Der normale Weg, um damit umzugehen, ist, entweder die Array-Länge zu übergeben, oder einen speziellen Wert zu verwenden, um das Ende des Arrays zu signalisieren.

+0

bekam es dank :) – AuSm88