C uebergabe/verarbeitung/rueckgabe von CharArrays und integer

ghost07max

Newbie
Registriert
Juli 2021
BeitrÀge
3
Hallo đŸ„Ș

meine Funktion verarbeitet den string aber nicht die int die ich uebergebe. Ich moechte verstehen warum der string auch in einer void funktion erfolgreich veraendert wird aber nicht eine int Variable, ich ubergeb naehmlich 2 parameter

C:
#include <stdio.h>
#include <string.h>

void str_funktion_void(int i,char str[]){
    i=123;
    strcpy(str,"Hallo Void\n");
}
char str_funktion(int i,char str[]){
    i=3;
    strcpy(str,"Hallo Welt\n");
    return i;
}

int main() {
    int i=0;
    char str[640]="";

    /* Variante (1) [void] 
    *   i     wird nicht veraendert
    *   str   wird veraendert */
    str_funktion_void(i,str);
    printf("i=%i\nstr=%s\n",i,str);

    /* Variante (2) [return]   
    *   i     wird veraendert
    *   str   wird veraendert */
    i=str_funktion(i,str);
    printf("i=%i\nstr=%s\n",i,str);

    return 0;
}
 
Stichwort "Pointer", schon mal gehört?
 
  • GefĂ€llt mir
Reaktionen: up.whatever und I'm unknown
PHuV schrieb:
Sieht nach Hausaufgaben aus. DafĂŒr gibts hier keine UnterstĂŒtzung.
Und die Hausaufgabe ist ein Aufsatz darĂŒber, warum das eine funktioniert und das andere nicht?
Was soll man sonst fragen wenn man es nicht verstanden hat?
 
  • GefĂ€llt mir
Reaktionen: ghecko und I'm unknown
ghost07max schrieb:
warum der string auch in einer void funktion erfolgreich veraendert wird aber nicht eine int Variable, ich ubergeb naehmlich 2 parameter
Der string ist eigentlich ein Pointer/Referenz/Zeiger zu dem string.
Damit wird der Funktion eine Kopie des Pointers zu dem String ĂŒbergeben.
char str[] ist das gleiche wie char *str, was das nochmal deutlich macht.
strcpy manipuliert nicht den Pointer zum String, sondern den String direkt.

Die int Variable wird auch als Kopie ĂŒbergeben.
Willst du also auch den Integer nach aussen wirksam in der Funktion manipulieren, musst du ein int *i ĂŒbergeben.
 
  • GefĂ€llt mir
Reaktionen: nullPtr und BAGZZlash
C ist eine simple Sprache. Funktions Argumente sind "call by value"

C:
void add_2(int b)
{
b += 2;
}
main{
int a =5;
add_2(a);
}

Der Wert 5 von a wird nach b kopiert. In der Funktion "add_2" wird b(5) um Zwei erhöht. am ende von add_2 ist b verloren. Diese regeln gelten auch fĂŒr Pointer.

C:
void modify(char a[127])
{
    a = 0;
    printf("Wert von a:%s\n", a);
}

int main()
{
    char s[127] = "eins";
    printf("Wert von s:%s\n", s);
    modify(s);
    printf("Wert von s:%s\n", s);
}

ausgabe:
Wert von s:eins
Wert von a:(null)
Wert von s:eins
 
  • GefĂ€llt mir
Reaktionen: ghost07max und KitKat::new()
Bonanca schrieb:
Was soll man sonst fragen wenn man es nicht verstanden hat?
Das ist oder könnte einwandfrei eine Hausaufgabenaufgabe zum VerstĂ€ndnis abfragen sein. Seine Frage ist auch nicht das Problem, das Problem sind Leute die dann hier alles direkt komplett vorkauen. An die Lösung heranfĂŒhren bringt einfach mehr und es bleibt eher etwas hĂ€ngen.
 
  • GefĂ€llt mir
Reaktionen: PHuV, Multivac und I'm unknown

DaysShadow und KitKat::new() stichwort pointer ist stichwort adresse als wert (dank Multivac ) erinnere ich mich das nicht die vriable sondern der wert uebergeben wird.​


Bonanca Stichwort hausaufgaben sagen mir kaum was, ich vermute hier im Forum gibts eine Fitnes ecke, kannst du dir das vorstellen?​


am sonsten kann ich versuchen solche fragen algemeiner zufassen, ohne ein Beispiel zu liefern
sorry^^ ich meinte abstrakter
 
Zuletzt bearbeitet:
@DaysShadow
Die Regeln einer Programmiersprache können nicht nicht durch Logik und Nachdenken ergrĂŒndet werden. Wichtiger ist das er sie selbst anwendet.
 
@Multivac WĂŒsste nicht wo ich dem widersprochen hĂ€tte, nur kann der TE noch 100 mal ein * irgendwo hinsetzen und damit die Regel anwenden, solange er nicht verstanden hat was das im Detail bedeutet und wann man es nutzt, fĂ€llt er bei der nĂ€chstbesten Gelegenheit wieder auf die Nase.

Es wĂ€re einfach gut gewesen, wenn der TE seine Lösung hier hĂ€tte schrittweise voran treiben können, sofern er das denn ĂŒberhaupt gemacht hĂ€tte. Jetzt hat er die Lösung ohne selbst nachzuschauen.
 
  • GefĂ€llt mir
Reaktionen: I'm unknown
programmieren ist eben eine sache die jeder lernen kann warum nicht auch hier?
wenn ihr wenn nicht moegt K.A. ^^
 
Zuletzt bearbeitet:
ZurĂŒck
Oben