[c] Struktur attribute ändern funktioniert nicht?

1. Wenn Du die Notation nicht kennst gibt es nur EINEN richtigen Weg: Lies nach wie die Notation ist. Auf Basis von Unwissenheit einfach herumraten wird dir langfristig keinen guten dienst tuen.

Sorry, aber wenn du sowas schon schreibst könntest du vielleicht auch sagen wie diese Notation heißt...wie soll ich eine Notation in den Manpages finden? man -> man 2 -> man struct man structure man 2 structure usw. gibt es alles nicht.

2. Zeigerarithmetik funktioniert abhängig vom Zeigertyp. Beispiel:

Code:
char* i;
*(i + 1) = 1;

int* j;
*(j +1) = 1;

double* k;
*(k + 1) = 1.0

um sizeof(typ).
Das Zeug ist ja eines der wenigen Dinge die ich schon kenne. Aber *(int*)s = b ist doch eine Spezialnotation und um derren Bedeutung ging es mir. Sprich warum funktioniert *(int*)s = b, aber nicht *s = b ? Ist dieses *(int*) sozusagen ein erzwungener Typecast nach Integer?


Ähm, das gehört zu den ABSOLUTEN Grundlagen von Zeigern. Also hör auf mit komplizierten Sachen rumzuspielen, schnapp Dir ein Buch/Tutorial und lern erstmal die GRUNDLAGEN bevor Du anfängst so einen Unfug zu programmieren.

Mein Problem war, weswegen es hier auch so eine Verwirrung gibt: Anstelle des komplizierten Zeigerrumgewerfes hätte ich wie ich jetzt gerade gemerkt habe auch ganz einfach:

Code:
(*s).attribut = neuer_wert


in der Funktion schreiben können. Ich habe das als allererstes getestet nachdem ich darauf gekommen bin der Funktion die Skruktur mit Call-By-Reference zu übergeben, aber es hatte mit einer unnützen Fehlermeldung nicht funktioniert. Gut möglich, dass ich wieder den Tippfehler mit s* statt *s damals drin hatte...ärgerlich. So hätten wir uns das ganze hier sparen können.

@Deepthroat: Ja...wie gesagt: Tippfehler :rolleyes: , ich weiss, das sind immer die dümmsten Fehler.
Danke für deine Erklärung zu ->, aber auch hier nochmal die Frage: Wie findet man sowas in der Dokumentation? Man -> gibts ja nicht.
 
Aber *(int*)s = b ist doch eine Spezialnotation und um derren Bedeutung ging es mir. Sprich warum funktioniert *(int*)s = b, aber nicht *s = b ? Ist dieses *(int*) sozusagen ein erzwungener Typecast nach Integer?
Ja, es ist ein Cast - auf "Zeiger auf int". Man hätte es auch schrittweise machen können:
C:
int* i = (int*)s;
*i = b;
@Deepthroat: Ja...wie gesagt: Tippfehler :rolleyes: , ich weiss, das sind immer die dümmsten Fehler.
Danke für deine Erklärung zu ->, aber auch hier nochmal die Frage: Wie findet man sowas in der Dokumentation? Man -> gibts ja nicht.
Die Programmiersprachen sind generell nicht in den Manpages dokumentiert. Du solltest dir dazu ein Buch besorgen, oder ein Tutorial durcharbeiten. Z.B. http://openbook.galileocomputing.de/c_von_a_bis_z/

Gruß
 
Zurück