Forum: Mikrocontroller und Digitale Elektronik C/++ dereferenzierung ohne Sternchen


von Grühn (Gast)


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

von Grühn (Gast)


Lesenswert?

Hier die Sternchen
1
* *

Die müssen beim absenden rausgefallen sein, sowas

von Kaj (Gast)


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?

von Grühn (Gast)


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.

von Rolf M. (rmagnus)


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.

von Referenz (Gast)


Lesenswert?

#define b a

Anders geht es in C nur über unportable Linker-Tricks.

von Grühn (Gast)


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 :-))

von A. S. (Gast)


Lesenswert?

OK, Persiflage einer anderen Fahrbe. Gut gemacht (ehrlich, ich bin 
ebenso genervt) kann dann aber auch gelöscht werden.

von Grühn (Gast)


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.

von Grühn (Gast)


Lesenswert?

A. S. schrieb:
> OK, Persiflage einer anderen Fahrbe. Gut gemacht (ehrlich, ich bin
> ebenso genervt) kann dann aber auch gelöscht werden.

Diskretion bitte! Ich bin heute inflagranti unterwegs ^^

von A. S. (Gast)


Lesenswert?

Grühn schrieb:
> Ich bin heute inflagranti unterwegs ^^

Du machst das sehr gut, unverkennbar. Fürs Original aber zu gut.

von Grühn (Gast)


Lesenswert?

was?

von Grühn (Gast)


Lesenswert?

Ach so. Jetzt habe ich es gesehen. Dieser Freud hat wieder mal 
hinterrücks zugeschlagen.
inkognito wollte ich schreiben ;)

von Axel S. (a-za-z0-9)


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.

von Grühn (Gast)


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.

von A. S. (Gast)


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?

von Cornelius (Gast)


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 ;-)

von Grühn (Gast)


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.

von Grühn (Gast)


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
>>

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.