C/++ dereferenzierung ohne Sternchen

Gast #5663576
Lesenswert?

Sehr geehrte Damen und Herren, liebe Feger.

Ich habe eine Frage an die Fachwelt. Mit folgende Programmzeilen 
erstellt man von a ein Duplikat in b.

1
void setup() {
2
  Serial.begin(9600);
3
  delay(500);
4
  
5
  byte a = 123;
6
  byte *b = &a;
7
  Serial.println(*b);
8
}
9

10
void loop() {
11
}

Nur ist das kein 1:1 Duplikat, weil b mit  benutzt werden muss, um den 
Zeiger zu dereferenzieren.

Daher mein Frage:

Gibt es auch ein "echtes" Redefines, also ohne Dereferenzierungsoperator 
'*' ? In Erinnerung habe ich eine Fall, wo es ohne Sternchen ging. Es 
ging da glaube ich um by-ref Argumente einer Funktion und ein relativ 
"neues" Feature in C++ oder c. Ist aber egal ob c oder ++ Danke für 
einen Tipp
Gast #5663586
Lesenswert?

Grühn schrieb:
> Mit folgende Programmzeilen
> erstellt man von a ein Duplikat in b.
Nein, macht man nicht. Du erstellst einen Zeiger, der auf a zeigt. 
Veraenderst du *b, dann aendert sich auch der Wert von a. Es ist also 
kein Duplikat, sondern ein Verweis auf a.

Grühn schrieb:
> weil b mit  benutzt werden muss, um den
> Zeiger zu dereferenzieren.
Kannst du das auch so formulieren, dass man das versteht?

Grühn schrieb:
> Gibt es auch ein "echtes" Redefines
Und was soll dieses "echte" von dem "unechten" unterscheiden?
Gast #5663599
Lesenswert?

Kaj schrieb:
> Kannst du das auch so formulieren, dass man das versteht?

Ich gab mir Mühe. Offenbar ohne Erfolg.

Gesucht ist die Möglichkeit, ein Duplikat einer Variable ohne Sternchen 
zu erstellen. Mit "Duplikat" meinte ich nicht den Inhalt des Zeigers und 
auch keine Kopie (ja du hast recht, falsches Wort) sondern eine echte 
zweite Referenz


Weiß nicht, wie ich es sagen soll.
#5663606
Lesenswert?

Grühn schrieb:
> Gibt es auch ein "echtes" Redefines, also ohne Dereferenzierungsoperator
> '*' ?

Es gibt Referenzen. Deine Funktion würde damit so aussehen:
1
void setup() {
2
  Serial.begin(9600);
3
  delay(500);
4
 
5
  byte a = 123;
6
  byte &b = a;
7
  Serial.println(b);
8
}

> In Erinnerung habe ich eine Fall, wo es ohne Sternchen ging. Es
> ging da glaube ich um by-ref Argumente einer Funktion und ein relativ
> "neues" Feature in C++ oder c.

Das Feature gab es in C++ schon immer und in C noch nie.

> Ist aber egal ob c oder ++

Nein, ist es nicht.
Gast #5663618
Lesenswert?

>> Ist aber egal ob c oder ++
>
> Nein, ist es nicht.

Doch. Es ist MIR egal. In diesem Fall hier.

Rolf M. schrieb:
> Es gibt Referenzen. Deine Funktion würde damit so aussehen:
>
>
1
> void setup() {
2
>   Serial.begin(9600);
3
>   delay(500);
4
> 
5
>   byte a = 123;
6
>   byte &b = a;
7
>   Serial.println(b);
8
> }
9
>
Jepp, das ist es. Danke :-))
Gast #5663627
Lesenswert?

Rolf M. schrieb:
> Das Feature gab es in C++ schon immer und in C noch nie.
>
>> Ist aber egal ob c oder ++
>
> Nein, ist es nicht.


Ich programmiere doch nicht in C oder C++. Sondern "in Arduino" :-D

Manche sagen Flickschusterei zu Arduino C(++). Ich bin mir nicht sicher, 
was es ist. Auf jeden Fall läuft die IDE stabil und der erzeugte Code 
ist brauchbar und auch nicht gerade langsam. Ich bin damit völlig 
zufrieden und habe bis jetzt auch keine Notwendigkeit gesehen, 
ASM-Schnippsel einzubauen. C++ hat andere gewichtige Features, die es 
von C unterscheiden (z.B. OOP). Auf diesem Level bin ich gerade nicht.
#5663754
Lesenswert?

Grühn schrieb:
> Rolf M. schrieb:
>> Das Feature gab es in C++ schon immer und in C noch nie.
>>
>>> Ist aber egal ob c oder ++
>>
>> Nein, ist es nicht.
>
>
> Ich programmiere doch nicht in C oder C++. Sondern "in Arduino" :-D

Das ist C++

> Manche sagen Flickschusterei zu Arduino C(++). Ich bin mir nicht sicher,
> was es ist. Auf jeden Fall läuft die IDE stabil und der erzeugte Code
> ist brauchbar und auch nicht gerade langsam.

Was zu 0% das Verdienst der Arduino-Leute ist. Die Toolchain (Compiler, 
Binutils, Libs, ...) ist avr-gcc & Freunde. Die IDE ist eine 
vorgefertigte Texteditor-Komponente aus wasweißich welchem Java 
Framework. Anspruchsvoll ist nichts davon. Vor allem wenn man es mit 
z.B. avr-gcc vergleicht.

> C++ hat andere gewichtige Features, die es
> von C unterscheiden (z.B. OOP).

Oder Referenzen. Danach hattest du ja gerade gefragt. Auch wenn du den 
Unterschied zu z.B. Zeigern offensichtlich nicht verstehst.

> Auf diesem Level bin ich gerade nicht.

Meine Meinung über dein Level möchtest du nicht hören. Glaub mir.
Gast #5663978
Lesenswert?

Axel S. schrieb:
> Meine Meinung über dein Level möchtest du nicht hören. Glaub mir.

Deine Meinung kannst du für dich behalten., Die ist zu 100% falsch, 
glaube mir mein Freund. Aber ich kenne diese Art Plapperköpfe aus 
jahrelanger Projektarbeit. Die frickeln vor sich hin und sind obendrein 
noch der Meinung, wertvoll zu sein. Vor kurzem gerade erst wieder 
erlebt. Hat so ein Spast den gemeinsamen Server lahmgelegt. Die 
Erklärung: Sequentielle Verarbeitung in SQL, per Cursor. Aber NEIN, man 
darf ja gegen eure Heiligkeit nichts sagen. Reuters Leute und Team 
Microsoft sind besondes schlim,. Sowohl im der täglichen (Riesen)dosis 
Pfusch als auch in der selbstbeweihräucherung.
Gast #5663998
Lesenswert?

So langsam macht mir der Thread Angst. Gehören die ernsthaften Antworten 
auch zur Persiflage? Sind TO und Komplementhär doch eins? War das 
Original schon nur ein Troll, kein ... .

Kann mich jemand per PN Aufklären?
Gast #5664018
Lesenswert?

>  byte a = 123;
>  byte *b = &a;
>
>
>Nur ist das kein 1:1 Duplikat, weil b mit  benutzt werden muss, um den
>Zeiger zu dereferenzieren.

Ein Duplicat? Nichts einfacher als das:
1
byte a = 123;
2
byte b;
3
b=a;

ganz ohne Sternchen ;-)
Gast #5664025
Lesenswert?

Wie gesagt, ich kenne das nur so. Vollmundige Sprüche, gepaart mit 
fachlicher Fragwürdigkeit, ist in der Praxis die Regel. Es sei denn, man 
hat mal einen wirklich qualifizierte Kollegen vor sich, was selten genug 
ist, kann es auch sinnvoll zugehen: Man hilft sich, statt sich i.d.A. zu 
treten.

Wer in der IT was zu bieten hat, hat so ein Theater offenbar nicht 
nötig. Aber jeder kann selbst entscheiden, was er sich wert ist.
Gast #5664028
Lesenswert?

Cornelius schrieb:
> Ein Duplicat? Nichts einfacher als das:
>
>
1
> byte a = 123;
2
> byte b;
3
> b=a;
4
>
>
> ganz ohne Sternchen ;-)

Das ist eine Kopie des Wertes. Was ich nicht wollte, mich aber wohl 
unklar ausgedrückt habe.

Die Aufgabe ist schon gelöst,

> Rolf M. schrieb:
>> Es gibt Referenzen. Deine Funktion würde damit so aussehen:
>>
>>
1
>> void setup() {
2
>>   Serial.begin(9600);
3
>>   delay(500);
4
>>
5
>>   byte a = 123;
6
>>   byte &b = a;
7
>>   Serial.println(b);
8
>> }
9
>>

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren