Forum: Mikrocontroller und Digitale Elektronik Startadresse Struct


von grobe_Leberwurst (Gast)


Lesenswert?

Hallo Leute,

wie bekomme ich die Startadresse einer Struct raus?

z.B.
1
struct 
2
{
3
  uint8_t a[15];
4
  uint16_t b[105];
5
} test;

von Peter II (Gast)


Lesenswert?

wie bei jeder anderen Variable auch - mit dem Adressoperator.
1
&test

von grobe_Leberwurst (Gast)


Lesenswert?

Ja das ergibt Sinn.

Wie würde dann ein Zeiger darauf aussehen?

von Peter II (Gast)


Lesenswert?

grobe_Leberwurst schrieb:
> Wie würde dann ein Zeiger darauf aussehen?

auch wie bei jeder anderen Variable.

Sinnvollerweise vergibt man der Struct einen eigenen Namen, eventuell 
sogar mit Typedef dann ist es einfacher.
1
struct myStructS
2
{
3
 uint8_t a[15];
4
 uint16_t b[105];
5
};
6
7
typedef myStructS myStructT;
8
9
10
myStructT x;
11
myStructT* y = &x;

von grobe_Leberwurst (Gast)


Lesenswert?

Bei deinem jetzigen Beispiel bekomme ich den Fehler "unknown type name 
'myStructS'"

von Peter II (Gast)


Lesenswert?

grobe_Leberwurst schrieb:
> Bei deinem jetzigen Beispiel bekomme ich den Fehler "unknown type name
> 'myStructS'"

ja war noch ein Fehler drin:
1
struct myStructS
2
{
3
 uint8_t a[15];
4
 uint16_t b[105];
5
};
6
7
typedef struct myStructS myStructT;
8
9
10
myStructT x;
11
myStructT* y = &x;

von grobe_Leberwurst (Gast)


Lesenswert?

Vielen Dank, jetzt stimmt die reale Startadresse schon mal mit der 
überein die im Zeiger steht. Dennoch eine weitere Frage, wie kann ich 
auf einzelne Bytes der Struct zugreifen.

so (erstes Byte)
1
uint8_t temp = *y;
 scheint es nicht zu funktionieren.

von Max H. (hartl192)


Lesenswert?

1
uint8_t temp = *(y->a);

von CC (Gast)


Lesenswert?

Mensch, wird dir nicht lästig das alles zu fragen? Hast du kein C Buch?

von Peter II (Gast)


Lesenswert?

grobe_Leberwurst schrieb:
> uint8_t temp = *y;
scheint es nicht zu funktionieren.

weil es nicht wirklich sauber ist. Es können auch Lücken in der Struct 
sein. Wenn man es will, muss den dem Compiler zwingen.

1
uint8_t* temp = (uint8_t*)y;

von grobe_Leberwurst (Gast)


Lesenswert?

Super es funktioniert, zwar Komplizierter als gedacht aber na gut.
1
uint8_t temp = *((y->a)+z);

von CC (Gast)


Lesenswert?

grobe_Leberwurst schrieb:
> Super es funktioniert, zwar Komplizierter als gedacht aber na gut.
> uint8_t temp = *((y->a)+z);

?? z soll wohl ein Index sein, aber dann verwende doch bitte die normale 
Notation:
1
uint8_t temp = y->a[z];

Meine Güte, hol dir ein C-Buch...

von [C][/C] (Gast)


Lesenswert?

Beitrag "Endadresse struct"
Da der Thread geschlossen wurde, werden wir wohl nie erfahren, wozu 
jemand die Endadresse eines structs braucht :-(

von .. (Gast)


Lesenswert?

 schrieb:
> Beitrag "Endadresse struct"
> Da der Thread geschlossen wurde, werden wir wohl nie erfahren, wozu
> jemand die Endadresse eines structs braucht :-(

um was anzuhängen ;-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ich zitiere meinen Moderatorkollegen von dort:

>> Wir sind nicht dazu da, Hausaufgaben zu lösen.
>> Man kann durchaus auch mal selber suchen.
Und diese träge Masse zwischen den Ohren in Betrieb nehmen...

>> Hier wird jetzt dichtgemacht.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.