Unterschied zwischen `const int * i` und `int const * i` erklären
-
Hallo, kann mir vielleicht jemand den Unterschied zwischen
const int * i
undint const * i
erklären?Eine schnelle Probe brachte leider kein Ergebnis:
void do_a(int & i) { i = 5; i++; // (&i)++; not allowed int j = i + 1; int k = (&i)[1]; (&i)[1] = 5; } void do_b(int * i) { // i = 5; not allowed i++; (*i)++; int j = *i + 1; int k = i[1]; i[1] = 5; } void do_c(const int & i) { // i = 5; not allowed // i++; not allowed // (&i)++; not allowed int j = i + 1; int k = (&i)[1]; // (&i)[1] = 5; not allowed } void do_d(const int * i) { // i = 5; not allowed i++; // (*i)++; not allowed int j = *i + 1; int k = i[1]; // i[1] = 5; not allowed } void do_e(int const & i) { // i = 5; not allowed // i++; not allowed // (&i)++; not allowed int j = i + 1; int k = (&i)[1]; // (&i)[1] = 5; not allowed } void do_f(int const * i) { // i = 5; not allowed i++; // (*i)++; not allowed int j = *i + 1; int k = i[1]; // i[1] = 5; not allowed }
Bin etwas verwirrt, wann man welche (oder beide) Schreibweisen braucht. Danke.
-
@Prepper
die beiden Schreibweisen machen keinen Unterschied.
-
@Belli
Danke! a) warum nicht? b) welche sollte man bevorzugen?
-
@Prepper du kannst ja mal nach "east const vs. const west" googlen, da gibt es viel Meinung zu.
-
@Schlangenmensch sagte in Unterschied zwischen `const int * i` und `int const * i` erklären:
"east const vs. const west" googlen
Meinst du nicht "west const und const east"? Westen ist doch geografisch links, und Osten rechts (die politischen Lager manchmal auch... USA super, China böse... ). Eigentlich ganz einfach^^
Und was ist mit
&
in dieser Hinsicht?
-
@Prepper sagte in Unterschied zwischen `const int * i` und `int const * i` erklären:
Westen ist doch geografisch links
Ja, eh. Und wenn das "const" im Westen, also links stehen soll, dann muss es "const west" heissen.
-
@Prepper Neuer Versuch, das hier entgleisen zu lassen? Bist ja ein unterhaltsamer Typ.
Gleiches gilt wohl auch für deinen Alt @CediCore, mit dem du deine Beiträge so schön upvotest
-
@Finnegan Hey ich bin real xD und durch @Prepper 's Beitrag hab ich sogar noch was dazugelernt, aber das mit den Himmelsrichtungen ist mir zu hoch.
-
@CediCore sagte in Unterschied zwischen `const int * i` und `int const * i` erklären:
aber das mit den Himmelsrichtungen ist mir zu hoch
Mir auch ... UND wir haben nix miteinander gemein!
@Finnegan sagte in Unterschied zwischen `const int * i` und `int const * i` erklären:
Neuer Versuch, das hier entgleisen zu lassen?
Das war nicht so gemeint! Das sollte eher unterhaltsam sein. Aber iA gilt China doch als eher autokratisch und USA als Vorzeigedemokratie. Vergesst meinen blöden Kommentar einfach. Er sollte keine Wertung sein.
Na ja, wer Zeit und Lust hat, kann ja einfach auf die Frage(n) antworten.
-
@Prepper sagte in Unterschied zwischen `const int * i` und `int const * i` erklären:
do_a(int & i)
Das ist call-by-reference, oder? Das Aufrufer-
i
kann direkt verändert werden.Und
*
by-value, oder? Das Aufrufer-i
kann indirekt verändert werden.Ich glaube, hab den Unterschied begriffen.
-
alter.....so langsam reichts aber auch mal oder? soll ich mir jetzt jeden tag nen neuen deiner scheiss accounts auf die blacklist packen oder wie ist das hier geplant? jetzt faengts schon im doppelpack an
-
@Cardiac sagte in Unterschied zwischen `const int * i` und `int const * i` erklären:
alter.....so langsam reichts aber auch mal oder?
Wo juckt es denn?
Hier ist eine gute Erklärung https://itecnote.com/tecnote/c-difference-between-the-and-operator-in-function-calls/ :
& function parameter specifically signifies that this parameter is being passed-in by reference (traditionally compilers implement this as a pointer) which is why you see the effect of this assignment in your main(). static would have nothing to do with that.
The difference in declaring a parameter to a function using & and * is that the second one allows a nullptr (or a non-existent or just a plain invalid address) to be passed-in while the & guarantees that there's a real object being referenced by this function's argument. Other than that both provide similar functionality of allowing an original object to be changed via it's reference.
und hier: https://stackoverflow.com/questions/28778625/whats-the-difference-between-and-in-c
Meine Annahme war nicht falsch. Ergänzend sollte allerdings noch hinzugefügt werden, dass
int & i
(als type modifier oder als Funktionsparameter) erst in C++ möglich ist, nicht in C.Wenn man so will, so ist
&
ein Fahrzeug mit Automatikgetriebe und*
eins mit Schaltung.Frage:
Würdet ihr immer
&
verwenden, wo dies möglich erscheint?
-
@Cardiac sagte in Unterschied zwischen `const int * i` und `int const * i` erklären:
alter.....so langsam reichts aber auch mal oder? soll ich mir jetzt jeden tag nen neuen deiner scheiss accounts auf die blacklist packen oder wie ist das hier geplant? jetzt faengts schon im doppelpack an
Das sind doch genau die Reaktionen, die er provozieren will. Einfach ignorieren, auch wenn's schwer fällt. Und wenn du ihn ärgern willst, alle Beiträge downvoten. Iwie sucht er ja nach Anerkennung und will doch iwie mitspielen.