WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Call by Value, Call by Reference (http://www.wcm.at/forum/showthread.php?t=98287)

BigNfan 28.05.2003 10:26

Call by Value, Call by Reference
 
Hi!

Ich muss für die Matura ne 20seitige Ausarbeitung über 2 Themen haben.
Hab eigentlich schon alles. Nach Verbesserung durch den Lehrer fehlt nur die Übergabe von Call by Reference und Call by Value

Kann mir wer sagen wie man sowas übergibt ?

danke im voraus ;)

_m3 28.05.2003 10:40

Call bei reference:
Du übergibst einen Pointer auf eine Variable (die Original-Variable kann in der Subroutine verändert werden).

Call bei Value:
Du übergibst den Wert der Variable (die Variable selbst kann in der Subroutine nicht verändert werden).

IIRC. ;)

BigNfan 28.05.2003 10:44

hi

was ist ein pointer?

und mit welchen befehl übergebe ich das?

danke!

renew 28.05.2003 10:51

Ein Pointer ist ein Zeiger auf den Speicherbereich der Variable - das heißt du kannst dann direkt den Wert der Variable ändern.

Wei schon von _m3 geschrieben, hast halt by Value nur den Wert, aber nicht die Variable direkt.

Befehle: abhängig von der Programmiersprache.

In VB is eigentlich alles By Reference, außer du gibts in der Funktion/Prozedur ein ByVal vor die Variable.
In C ists der nette Stern nach der Variable - also Var*, um By Reference zu übergeben.
In C ist, soweit ich micht erinnere alles byVal, außer Strings, die sind by Reference und brauchen keinen *.
....

Hast in der Schul net aufpasst.... :D ;)

Who-T 28.05.2003 10:53

c/c++/alle sprachen die das unterstützden


bsp für call by value

Code:

int main (void)
{
  int a = 10;
 
  increase(a);
  printf ("%d", a);
}

void increase (int var)
{
  var ++;
}

ausgabe hier ist 10, da der wert von a kopiert wird, in increase nur der kopierte wert erhöht wird, der originale wert aber gleich bleibt

Code:

int main (void)
{
  int a = 10;
  increase (&a);
  printf ("%d", a);
}

void increase (int* var)
{

}


_m3 28.05.2003 10:53

Zitat:

Original geschrieben von BigNfan
hi

was ist ein pointer?

und mit welchen befehl übergebe ich das?

danke!

:eek: Bitte was hast Du auf den anderen 20 Seiten stehen, wenn Du nicht mal weist, was ein Pointer (auf Deutsch "Zeiger", aber das sollte ein Maturant wissen) ist ?????
Aaaaaaaaaaaaaaaaaaaaaaaaaaahhhhhh :eek: :ms:

This is not funy! :(

Wie Du call by reference oder value machst, hängt von der Programmiersprache ab, wie LLR schon geschrieben hat.

Who-T 28.05.2003 10:55

c/c++/alle sprachen die das unterstützden


bsp für call by value

Code:

int main (void)
{
  int a = 10;
 
  increase(a);
  printf ("%d", a);
}

void increase (int var)
{
  var ++;
}

ausgabe hier ist 10, da der wert von a kopiert wird, in increase nur der kopierte wert erhöht wird, der originale wert aber gleich bleibt

Code:

int main (void)
{
  int a = 10;
  increase (&a);
  printf ("%d", a);
}

void increase (int* var)
{
  (*var)++;
}

ausgabe is 11, da die adresse von a übergeben wird, in increase der wert an der übergebenen adresse erhöht wird -> call by reference.

int* var ist ein pointer auf den speicherbereich eines ints mit dem namen var.
sprich ein pointer zeigt immer auf einen speicherbereich eines bestimmten typs, der wert eines pointers ist nur die adresse, auf die er zeigt

BigNfan 28.05.2003 11:23

Zitat:

Original geschrieben von LLR
Ein Pointer ist ein Zeiger auf den Speicherbereich der Variable - das heißt du kannst dann direkt den Wert der Variable ändern.


In VB is eigentlich alles By Reference, außer du gibts in der Funktion/Prozedur ein ByVal vor die Variable.


thx

Who-T 28.05.2003 11:32

roots, löschst bitte den ersten beitrag von mir. war n doppelpost, hab mal zu schnell auf tab/leertaste gedrückt.

frazzz 28.05.2003 11:47

Zitat:

Original geschrieben von _m3
:eek: Bitte was hast Du auf den anderen 20 Seiten stehen, wenn Du nicht mal weist, was ein Pointer (auf Deutsch "Zeiger", aber das sollte ein Maturant wissen) ist ?????
Aaaaaaaaaaaaaaaaaaaaaaaaaaahhhhhh :eek: :ms:

This is not funy! :(

Wie Du call by reference oder value machst, hängt von der Programmiersprache ab, wie LLR schon geschrieben hat.


:ja:


verwundert mich auch etwas

Who-T 28.05.2003 11:48

Zitat:

Original geschrieben von _m3
[...] was ein Pointer (auf Deutsch "Zeiger", aber das sollte ein Maturant wissen) ist ?????

ich bezweifle bis heute dass mein informatiklehrer das weiß. war in ner AHS und unsere ausbildung im wpf inf war schlichtweg ein witz.

renew 28.05.2003 15:09

Zitat:

Original geschrieben von Who-T


ich bezweifle bis heute dass mein informatiklehrer das weiß. war in ner AHS und unsere ausbildung im wpf inf war schlichtweg ein witz.

Naja, du weißt nicht wie wir C "gelernt" haben. :(
Wir ham grad a paar kleine Programme geschrieben, die sich ein wenig mit Zahlen und Strings gespielt haben.

Und da is halt grad mitgekommen, was byVal und byRef in C is, und wie man das angibt - wobei ich jetzt gestehen muss, ich war mir auch nimmer sicher wo der * und das & hingehört.

BigNfan 28.05.2003 15:21

unser VBA-Crash-Kurs war aber noch besser - 3x 3Std glaub ich.. je 3std 1 Programm..

BULMIST 28.05.2003 16:10

Geh doch HTL ;-) Ich habs 4. Jahr jetz durchgehend mit C++ ztun, und muss sagen, es steht ma echt scho überall raus :-) Aber zumindest hätt i auch gwusst, was Call by Reference und Call by Value bedeutet... nona :-)

Jedenfalls: VIVA LA VISUAL BASIC! ;-) Ich liebe diese Sprache... um einiges einfacher als C++/VC++ aber dennoch genauso effektiv und jetz, dank Visual Studio .NET noch um einiges kombatibler zu andren Sprachen... VB .NET rocks! :-)

So! Sorry für meine doch einigermaßen Off-Topic-Schwärmerei, aber dass musste mal gesagt werden!

Ciao, Bulmist

Who-T 28.05.2003 16:31

hehe
auch offtopic
aber VB is für mich als linuxer ein graus ;)

java rult. das einzige was ich programmieren kann und das sicher in der fh auch rennt ;)
weil unser jetziger "programmierprofessor" so n microsoft fan is...

renew 28.05.2003 17:02

Zitat:

Original geschrieben von Who-T
hehe
auch offtopic
aber VB is für mich als linuxer ein graus ;)

java rult. das einzige was ich programmieren kann und das sicher in der fh auch rennt ;)
weil unser jetziger "programmierprofessor" so n microsoft fan is...

naja, aber C is halt auch a sehr happige gschicht.

Wenn ich dazu komm, werd ichs mir wieder mal a bissl anschaun, aber naja, man kann halt so ziemlich alles damit machen, wenn man sich auskennt.
Und Java dürft a ziemlich guter, und flexibler Mittelweg sein. Aber um schnell mal was für die Windowswelt zu coden, seis ein kleines Progamm für sich selber (VBA...), ein Verwaltungstool, bzw. auch um in Windows was zu administrieren (Stichwort VBS) ists schon sehr, sehr praktisch.

Seidl 28.05.2003 19:57

Ist zwar auch etwas Off-Topic aber ich muss das einfach mal wieder loswerden ;)

In der .NET Welt werden die Sprachen über kurz oder lang ohnehin zusammenwachsen. Mittlerweile kann man mit VB.NET vieles machen das früher C++ vorbehalten war und andererseits kann man mit .NET Pendant von C++ jetzt auch wunderbar einfach GUI's zaubern, was ja früher oft auch nicht so ohne war.
Klingt natürlich ein wenig nach Lobhudelei aber mir gefällt die Richtung in die sich die Sache bewegt wirklich recht gut.

frazzz 28.05.2003 20:04

quote:
--------------------------------------------------------------------------------
Original geschrieben von _m3
[...] was ein Pointer (auf Deutsch "Zeiger", aber das sollte ein Maturant wissen) ist ?????

--------------------------------------------------------------------------------


Zitat:

Original geschrieben von Who-T


ich bezweifle bis heute dass mein informatiklehrer das weiß. war in ner AHS und unsere ausbildung im wpf inf war schlichtweg ein witz.


dazu benötigt man keine informatikausbildung sondern schlicht und einfach englischunterricht :D



sry das dies so spät kam, nur hats kein anderer gepostet, wie sonst üblich :lol:

_m3 28.05.2003 20:07

Zitat:

Original geschrieben von frazzz
sry das dies so spät kam, nur hats kein anderer gepostet, wie sonst üblich :lol:
Sorry, hatte auch noch ein klein wenig was zu arbeiten ;)
Ich werde mich aber in Zukunft wieder bemühen, in Echtzeit böse zu sein ;) :D

Who-T 28.05.2003 21:44

najo
nur weil ich pointer mit zeiger übersetzen kann heißt das net dass ich weiß was ein pointer in C is.
die uhr hat schließlich auch zeiger, bei denen kann ich jedoch weder call by value noch call by reference machen.

@seidl
leider ist das ganze .NET so dermaßen auf windows-only ausgelegt (jaja, ich weiß, das mono projekt gibts auch) dass es trotz seiner stärke uninteressant wird.

kikakater 29.05.2003 12:01

Es gibt 3 Arten Übergabeparameter im Kopf einer Funktion zu vereinbaren. Abhängig von der Definition der Parameter greift man auf unterschiedliche Bereiche im Speicher zu, zusätzlich verändert sich die Schreibweise bei Referenzen.

Code:

1. Wertübergabe: beispiel(3);
int beispiel(int v)
{
 v=v+1; // Veränderung einer Variable am Stack
 return v;
}

2. Adressübergabe: a=3; beispiel2(&a);
void beispiel2(int * pv)
{
 *pv= *pv + 1; // Veränderung der Originalvariable
}

3. Referenzübergabe (nur bei c++ vorhanden): a=3; beispiel3(a);
void beispiel3(int & ra)
{
 ra= ra + 1; // Originalvariable wird verändert, trotzdem keine Zeigersemantik im Quellprogramm
// (kein *ra sondern ra und ra wird bedeutungsmäßig (semantisch) als int Wertvariable verwendet,
// von der Syntax her aber als Zeigervariable vom Parser und Compiler betrachtet.
}

mfg
Kikakater


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag