Pointer als funktionsparameter
-
Hallo!
ich frag mich ob ich dumm bin ode rwas , aber ich hab hier ein problem...#include <iostream> using namespace std; void ini(int *p) { cout<<*p; } int main(void) { int *i; int r = 8; i=&r; ini(i); getchar(); return 1; }so läuft der code bei mir....
k euch mag das vielleicht ganz normal erscheinen, aber ich dachte, die funktion ini müsste man folgendermaßen aufrufen:ini(&i);so wär das doch am logischsten ... (und so wird es auch in tutorials gelehrt)
thx & mfg!!!
-
in i steht die adresse von r.
also kannst du die adresse an die funktion übergeben mit i.damit initialsierst du p richtig.
und in der funktion musst du dereferenzieren.
-
#include <iostream> void show_value(const int *p) { std::cout << *p << std::endl; } int main() { int my_integer = 8; show_value(&my_integer); // Zeiger auf my_integer übergeben int* pointer_my_integer = &my_integer; // Zeiger auf my_integer show_value(pointer_my_integer); // Den Zeiger pointer_my_integer der Funktion übergeben ... // das ist ja schon ein Zeiger .. sonnst bekommst du einen // doppel Zeiger (int**)! // return 1; wenn dann return 0; aber auch das muss nicht. Siehe Std. }...
-
aah mist... sry.. i ist ja ein pointer... ich hab die ganze zeit gedacht es sei eine normale variable... trotzdem hab ich was dazu gelernt, und zwar weshalb man in solcen fällen pointer ohne dereferenzierung oder adressoperator übergeben kann^^
thx & mfg!!!
-
JossBoss schrieb:
...ich hab die ganze zeit gedacht es sei eine normale variable...
Ist es ja auch - eine Variable, deren Inhalt eben eine Adresse im Speicher ist .

(Anders übrigens als eine Referenz, die KEINE Variable ist)
Am Besten gewöhnst Du Dir diese Denke gleich an, sonst kommst Du öfter in Probleme - spätestens bei "int***" ;).
Gruß,
Simon2.