array element in struktur beschreiben

Gast #7002606
Lesenswert?
• ▲
▼
Guten tag,

ich habe ein array in file1.c
1
static const uint8_t address[] = {0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu};

in einer Funktion möchte ich eine Struktur beschreiben
1
typedef struct
2
{
3
  const uint8_t address[6];
4
  const uint8_t id;
5
}info_ts;

wie bekomme ich am geschicktesten address in der structur mit der 
globalen address beschrieben?
Meine Bisherige Möglichkeit ist
1
const info_ts info_s = 
2
{
3
  .address[0] = address[0],
4
  .address[1] = address[1],
5
... ... ...
6
  .id = 0x85
7
};
gibt es da noch eine kürzere möglichkeit das Array zu übertragen?
#7002624
Lesenswert?
• ▲
▼
Felix schrieb:
> gibt es da noch eine kürzere möglichkeit das Array zu übertragen?

Du kannst eine normale Initialisierungsliste ohne Benennung der Member 
nehmen. Ist nur marginal kürzer und hat die Unschönheit dass es evtl. 
falsch initialisiert wird wenn sich die Position der Struktur Member 
ändert. So ist es also schon besser.

Bei Cpp könntest du für die Struct einen Konstruktor angeben:
1
struct info_ts
2
{
3
  const uint8_t address[6];
4
  const uint8_t id;
5
  
6
  info_ts(uint8_t* paddress, uint8_t _id)
7
  {
8
    memcpy(address, paddress, 6);
9
    id = _id;
10
  }
11
};

Bei C könntest natürlich auch deine Struktur ändern indem du nur einen 
Pointer auf die Adresse und evtl die Länge hast. Dann sparst du dir ein 
paar Byte und musst auch nicht so viel umkopieren.
1
typedef struct
2
{
3
  const uint8_t* paddress;
4
  const uint8_t  addrLen;
5
  const uint8_t id;
6
}info_ts;
7

8
const info_ts info_s = 
9
{
10
  .paddress = address,
11
  .addrLen  = sizeof(address),
12
  .id = 0x85
13
};
Gast #7003153
Lesenswert?
• ▲
▼
N. M. schrieb:
> Oliver S. schrieb:
>> memcpy.
>> Oliver
>
> Du hast das const vor der Destination gesehen?

Ja, mit memcpy wäre das wesenstlich kürzer.
Aber wie N. M. auch gesehen hat, ist das alles const.
Werde es dann so belassen, dass ich jedes element einzeln schreibe.
Ist sind ja nicht so viele.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.