Zeiger auf Array ein weiter schieben

Gast #5393615
Lesenswert?
• ▲
▼
Hallo zusammem,
bin in C noch nicht so fit.
Habe ein kleines Problem mit Zeigern.

Ich übergebe einen Zeiger auf ein Array dieser Funktion:
1
MasterWrite( unsigned char *msg, unsigned char msgSize)

Und zwar so:
1
U08 msg[8];
2
U08 msgSize = 8;
3
MasterWrite(msg , msgSize);

Ich will jetzt aber, dass der Zeiger nicht auf msg[0] zeigt, sondern auf 
msg[1], da in der Funktion MasterWrite erst am msg[1] angefangen werden 
soll.
Wie kann ich den Zeiger manipulieren?
Ich bekomme es einfach nicht hin. Der Compiler spuckt mir immer 
irgendwelche Fehlermeldungen aus.

Bitte haut mich nicht gleich, bin noch Anfänger.
Gast #5393645
Lesenswert?
• ▲
▼
Ich würde das schon bei der Übergabe des Zeigers einfügen:
1
MasterWrite(&msg[1], msgSize);

Je nachdem was da in der Funktion passiert, musst du dann natürlich 
aufpassen, dass du nicht über das Array hinaus läufst.
#5393670
Lesenswert?
• ▲
▼
C-Anfänger schrieb:
> Der Compiler spuckt mir immer irgendwelche Fehlermeldungen aus.

Na da wird ja auf dem Bildschirm nicht einfach im Wortlaut stehen 
"irgendwelche Fehler sind aufgetreten". Da wird schon mehr (für dich 
unverständliches Zeugs) stehen.


In solch einem Falle ist es zweckmäßig,

a) den genauen Wortlaut der Fehlermeldungen nicht geheim zu halten, 
sondern zu "veröffntlichen", so daß der geneigte Mit-Leser einen 
Kommentar dazu abgeben kann.

b) selber mal versuchen zu deuten, was die Fehlermeldung wohl aussagen 
möchte. Diese (deine) Deutungs-Annahme auch mit veröffentlichen, auf daß 
noch mehr Kommentare eintreffen.



"Aus Fehlern wird man klug" tritt dann in Folge automatisch ein
#5393671
Lesenswert?
• ▲
▼
Increment schrieb:
> C-Anfänger schrieb:
>> Oh mann, natürlich. So einfach!
>> Danke.
>
> Luther B. schrieb:
>> Du hast aber schon gesehen, dass msg als Array deklariert ist,
>> demzufolge kein lvalue ist und nicht inkrementiert werden kann?
>
> Scheint dafür aber erstaunlich gut zu funktionieren.

Weil du vermutlich was anderes compilierst, als du hier postest und 
nicht verstehst, worin der Unterschied besteht. Was macht dein Compiler 
denn hier?

1
$ cat x.c
2

3
int main()
4
{
5
  char m[8]; 
6
  m++; 
7
}
8
$ gcc x.c 
9
x.c: In function ‘main’:
10
x.c:5:3: error: lvalue required as increment operand
11
  m++; 
12
   ^

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.