INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 2 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
gegenseitiges Zuweisen von Pointeradressen und Ihrer "Werte"
03.10.2015, 11:31
Beitrag #9
RE: gegenseitiges Zuweisen von Pointeradressen und Ihrer "Werte"
Hi,
fast...
Code:
arr = &pb;
Das funktioniert wahrscheinlich nicht, da arr durch die Deklaration sozusagen ein konstanter Zeiger ist. Es wäre auch nicht wirklich sinnvoll, da dadurch der Speicherbereich, auf den arr vorher zeigt nicht mehr erreichbar wäre.
Ich frage mich sowieso, warum Du das machst. Ob der Zeiger jetzt arr oder pb heißt ist egal.

Code:
pb=&arr;
arr ist sowieso schon ein Zeiger. Richtig wäre also
Code:
pb = arr;
   // oder
pb = &(arr[0]);

...und dann noch der Unterschied zwischen Dereferenzierung und Adressermittlung:
Code:
fval = &pf;
"&pf" ist die Adresse von pf, also ein Zeiger auf einen Zeiger auf ein float (float**). Was Du meinst ist vermutlich das:
Code:
fval = *pf;
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.10.2015, 11:43 (Dieser Beitrag wurde zuletzt bearbeitet: 03.10.2015 11:48 von HaWe.)
Beitrag #10
RE: gegenseitiges Zuweisen von Pointeradressen und Ihrer "Werte"
ok, fassen wir zusammen, nur um es mir richtig verständlich zu machen:

Code:
float fval;
float* pf;
byte arr[4]; // um Speicherplatz festzulegen
pb* byte;

// umwandeln von float in byte array
pf = &fval;     // float Adresse speichern
pb = (byte*)pf; //  Adressen gleichsetzen
arr = pb;      //  Pointer umbiegen, dass arr jetzt die Byte Daten enthält

// umwandeln von byte array in float
pb = &(arr[0]); // oder: pb = arr;
pf = (float*)pb;
fval = &pf; // Pointer umbiegen, dass fval jetzt die float Zahl hat

jetzt richtig?
ich möchte gern arr als feste Variable verwenden können -
Die Pointerarithmetik soll getrennt laufen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.10.2015, 11:47
Beitrag #11
RE: gegenseitiges Zuweisen von Pointeradressen und Ihrer "Werte"
Hi,
nein, da stimmt noch einiges nicht. Bevor ich es jetzt aber korrigiere: Warum machst Du mit dem arr rum? Was versprichst Du Dir davon, im Gegensatz zur direkten Verwendung von pb? Oder anders: Was glaubst Du, geht mit arr, aber nicht mit pb?
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.10.2015, 11:56
Beitrag #12
RE: gegenseitiges Zuweisen von Pointeradressen und Ihrer "Werte"
das ist nur, damit ichs richtig verstehe -
das eine sind die Variablen, die ich fest im Programm verwende zum Berechnen und Versenden, auch für andere Zwecke
fval, array[4]

das andere sind die Pointer daruf, die ich hin- und herbiege, um die vorher definierten Variablen zu verändern.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.10.2015, 12:07 (Dieser Beitrag wurde zuletzt bearbeitet: 03.10.2015 12:08 von Thorsten Pferdekämper.)
Beitrag #13
RE: gegenseitiges Zuweisen von Pointeradressen und Ihrer "Werte"
Hi,
eine Variable, die Du so definierst:
Code:
byte arr[4];
...ist im Prinzip ein Zeiger, den Du nicht verändern kannst. Zusätzlich werden 4 Byte Speicherplatz reserviert. Du kannst den "Pointer" arr also nicht verbiegen. Du kannst nur Daten in den Speicherbereich kopieren oder rauslesen. Ich nehme mal an, dass es das ist, was Du willst. Ansonsten müsstest Du einen richtigen Zeiger verwenden. Dein Coding müsste dann ungefähr so aussehen:
Code:
float fval;
float* pf;
byte arr[4]; // um Speicherplatz festzulegen
pb* byte;

// umwandeln von float in byte array
pf = &fval;     // float Adresse speichern
pb = (byte*)pf; //  Adressen gleichsetzen
memcopy(arr, pb, sizeof(float));  // Daten in arr kopieren

// umwandeln von byte array in float
pb = &(arr[0]); // oder: pb = arr;
pf = (float*)pb;
fval = *pf; // Zuweisung des Werts an fval
...bitte auch die letzte Zeile beachten!

Wenn es Dir nur darauf ankommt, einen float in ein byte Array zu kopieren und umgekehrt, dann geht es auch so:
Code:
float fval;
byte arr[4]; // um Speicherplatz festzulegen

// umwandeln von float in byte array
memcopy(arr, &fval, sizeof(float));  // Daten in arr kopieren

// umwandeln von byte array in float
memcopy(&fval, arr, sizeof(float));
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.10.2015, 12:12 (Dieser Beitrag wurde zuletzt bearbeitet: 03.10.2015 12:14 von HaWe.)
Beitrag #14
RE: gegenseitiges Zuweisen von Pointeradressen und Ihrer "Werte"
eine ganz super-tolle Erklärung, vielen, vielen Dank!
8-)

(ps,
würde ich also eine long Zahl statt eines Byte Arrays verwenden, könnte ich die Pointer umbiegen - nur bei array[4] geht es nicht, da unveränderlich.
Das hatte ich bisher nicht verstanden, echt gut! Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.10.2015, 12:20
Beitrag #15
RE: gegenseitiges Zuweisen von Pointeradressen und Ihrer "Werte"
(03.10.2015 12:12)HaWe schrieb:  würde ich also eine long Zahl statt eines Byte Arrays verwenden, könnte ich die Pointer umbiegen - nur bei array[4] geht es nicht, da unveränderlich.
Eine "long Zahl" ist kein Pointer, also ist Deine Aussage oben nicht ganz so sinnvoll. Wenn man es korrekt formuliert, dann wäre es: "Würde ich also einen Pointer statt eines Byte Arrays verwenden, könnte ich den Pointer umbiegen."
Außerdem: Selbst wenn es mit einem Array ginge, wäre es nicht besonders sinnvoll. Der einzige Unterschied zu einem Pointer wäre nämlich, dass Du irgendwo im Speicher ein paar Bytes reserviert hättest, die nicht mehr erreichbar sind und auch nicht mehr freigegeben werden. Auch wenn Speicherplatz kein Problem ist kann das nicht sinnvoll sein.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.10.2015, 12:27 (Dieser Beitrag wurde zuletzt bearbeitet: 03.10.2015 12:35 von HaWe.)
Beitrag #16
RE: gegenseitiges Zuweisen von Pointeradressen und Ihrer "Werte"
stimmt natürlich.
Ich weiß zwar auch, dass arrays in C pointer sind
byte array[] identisch mit byte * array
aber irgendwie ist bei mir aus alten Zeiten immer noch drin dass
byte arr[4];
und
long arr; // aka int32_t arr;
"irgendwie" ziemlich das gleiche "sind". Was natürlich nicht stimmt, klar.

Die Bytes in byte array[4] werden aber schon öfter verwendet, überwiegend als Puffer um auch andere Daten (Sensoren, Berechnungen) zwischenzuspeichern, bevor sie dann nacheinander sortiert in einen großen array[31] kopiert werden, um dann auf die große Reise zu gehen...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Zahl von SD-Card Modul einlesen und Var. zuweisen Nafetz 13 291 28.10.2016 10:12
Letzter Beitrag: hotsystems
  Gewichteten Durchschnitt berechnen, 20 Werte in fortlaufender Variable speichern TimeMen 10 463 03.07.2016 09:00
Letzter Beitrag: Binatone
  Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht TimeMen 24 732 02.07.2016 14:18
Letzter Beitrag: hotsystems
  Werte an anderes Programm weiterleiten Typ 2 433 12.03.2016 23:28
Letzter Beitrag: Typ
  digitale Werte trotz Stromunterbrechung nicht verlieren goldfisch 63 4.218 06.01.2016 13:17
Letzter Beitrag: Bitklopfer
  werte vom MPU6050 gy521 bekommen max1798 0 457 18.12.2015 21:11
Letzter Beitrag: max1798
  Arduino werte auslesen Atwist 11 1.316 21.11.2015 20:58
Letzter Beitrag: hotsystems
  Werte aus der SD - Karte zuordnen Gandalf 19 1.905 12.09.2015 12:48
Letzter Beitrag: Gandalf
  DHT22-Werte via Funk MeisterQ 27 4.865 27.07.2015 21:48
Letzter Beitrag: MeisterQ
  Werte in die UTouchCD.h eintragen jgrothe 0 439 17.06.2015 17:23
Letzter Beitrag: jgrothe

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste