Übergabe call by reference
-
Moin ich hab nen Problem ich will die Werte per call by Value ans UP übergeben bekomme aber nur die Adressen hin was mir schon klar ist.
Nur wie kann man die Werte im UP direkt übergeben?#include <stdio.h> #include <stdlib.h> void cursor_pos (int *spt, int *zln); void cursor_pos (int *spt, int *zln) { system("cls"); printf("%i\n",spt); printf("%i\n",zln); } void main() { int spalte,zeile; // 80 spalten // 25 zeilen int *ptr_spalte,*ptr_zeile; int fehler; printf("test"); do { printf("\n\nZeile eingeben\n"); scanf("%i",&zeile); if(zeile > 80 || zeile < 0) { printf("Wertebereich ueberschritten \nErneute Eingabe taetiegen!"); } }while (zeile > 25 || zeile < 0); do { printf("\n\nSpalte eingeben\n"); scanf("%i",&spalte); if(spalte > 80 || spalte < 0) { printf("Wertebereich ueberschritten \nErneute Eingabe taetiegen!"); } }while (spalte > 80 || spalte < 0); cursor_pos(&spalte,&zeile); }
-
entweder ohne pointer oder du dereferenzierst die pointer in der funktion.
-
Dragonslayer schrieb:
Moin ich hab nen Problem ich will die Werte per call by Value ans UP übergeben bekomme aber nur die Adressen hin was mir schon klar ist.
Wo bekommst du wie und warum "nur die Adressen hin" und was daran ist dir klar bzw. unklar??
Dragonslayer schrieb:
Nur wie kann man die Werte im UP direkt übergeben?
Ich schätze du nennst Funktionen Unterprogramme? (=UP?)
Du kannst
#include <stdio.h> foo_a( int bar_a ) { printf( "%i", bar_a ); } // , foo_b( int* bar_b ) { printf( "%i", *bar_b ); } // oder foo_c( int &bar_c ) { printf( "%i", bar_c ); } // machen und jeweils mit int main( ) { int bar = 10; foo_a( bar ); // , foo_b( &bar ); // oder foo_c( bar ); }
aufrufen.
Die Deine reine Deklaration
void cursor_pos (int *spt, int *zln);
direkt vor der Definition derselben Funktion ist übrigens unnötig.
greetz, Swordfish
PS: void main( ) und system( ... ) ist grausigst.
PPS: aja, wofür definierst Du eigentlich ptr_spalte und ptr_zeile!? Stört Dich das "Variable declared but never used" (oder so ähnlich) Deines Compilers (das du sehr wahrscheinlich bekommst) garnicht?
-
Swordfish schrieb:
// oder foo_c( int &bar_c ) { printf( "%i", bar_c ); }
adressoperator vor'm argument
was hat das zu bedeuten?
-
@vista
scheint ein kurioser Mix aus C89 und C++ zu sein
-
Sagt jetzt bloß, in C gibt's keine Referenzen!?
greetz, Swordfish
-
Swordfish schrieb:
Sagt jetzt bloß, in C gibt's keine Referenzen!?
doch. in C heissen die 'Zeiger'.
sind aber das selbe wie in anderen sprachen (z.b. java) referenzen.
-
Swordfish schrieb:
Sagt jetzt bloß, in C gibt's keine Referenzen!?
greetz, Swordfish
Das ist jetzt nicht dein Ernst?
-
Doch!?
Aber von nun an weiß ich:
In C gibt es keine Referenzen im Sinne von C++-Referenzen. *hundertmalaufsflipchartschreibenmuss*
greetz, Swordfish
-
Also ich hab mein fehler gefunden hab im UP
in zeile 11 12 einfach die "*" Operatoren vergessen.
-
Swordfish schrieb:
Doch!?
Aber von nun an weiß ich:
In C gibt es keine Referenzen im Sinne von C++-Referenzen. *hundertmalaufsflipchartschreibenmuss*
greetz, Swordfish
In C++ gibt es dafür kein Default-Int!
-
Du kannst eigentlich das x<0 in deinen Bedingungen weglassen da scanf sowieso mindestens ein ENTER benötigt und die Eingabe mit \0 abschließt (ENTER=\0)
-
Nein schrieb:
Du kannst eigentlich das x<0 in deinen Bedingungen weglassen da scanf sowieso mindestens ein ENTER benötigt und die Eingabe mit \0 abschließt (ENTER=\0)
Bitte keine Lügen hier verbreiten
Erstens ist ENTER gleich \n (und das hat normalerweise den ASCII-Code 10).
Zweitens ist Enter ein Whitespace und wird deshalb sowieso nicht mit ausgewertet.
Und drittens kann der Nutzer auch negative Werte eingeben - und die solltest du schon abfangen können.
@Dragonslayer: Aber du solltest trotzdem mal deine Bedingungen überprüfen - bei der Eingabe der Zeile stimmen die if()-Bedingung und das Endekriterium nicht überein.
(und mehrfach auftretender (fast) identischer Code ist ein guter Kandidate dafür, in Funktionen ausgelagert zu werden)