Hallo,
ich brauche mal die Hilfe der C-Guru-Sektion: Definition: typedef struct s_point {double x, y, z;} point_t;
Code: if(l1[i].y < coord_buf){ coord_buf=l1[i].y; stelle=i; }
So und jetzt will ich das je nach Parameter "n" (völlig offen was und wie) mal für x, y, oder z machen.
Geht das irgendwie einfach oder muß man immer mit if / case arbeiten?
Danke im voraus!
Bernhard
Das muesste eigentlich mittels Zeigern moeglich sein. double* ptr=&l1.x;
*ptr=<neuer Wert fuer x> ptr++; *ptr=<neuer Wert fuer y>
Allerdings solltest Du Dir dann besser ueberlegen, ob ein Array statt einem struct die richtige Datenstruktur ist.
Bernhard Schiffner bernhard@schiffner-limbach.de (Di 23 Jan 2007 08:53:50 CET):
Hallo,
ich brauche mal die Hilfe der C-Guru-Sektion: Definition: typedef struct s_point {double x, y, z;} point_t;
Code: if(l1[i].y < coord_buf){ coord_buf=l1[i].y; stelle=i; }
So und jetzt will ich das je nach Parameter "n" (völlig offen was und wie) mal für x, y, oder z machen.
Ich sehe kein "n". Ich nehme mal an, Du willst parametrisieren, ob du x, y oder z meinst?
Vielleicht hilft 'ne Union mit 'nem Array?
Am Dienstag, 23. Januar 2007 10:08 schrieb Heiko Schlittermann:
typedef struct s_point {double x, y, z;} point_t;
coord_buf=l1[i].y;
Ich sehe kein "n". Ich nehme mal an, Du willst parametrisieren, ob du x, y oder z meinst?
Vielleicht hilft 'ne Union mit 'nem Array?
Klar doch: typedef struct s_point {double koord[3]} point_t;
so oder ähnlich müsste gehen, dann wäre der Parameter ein enum oder uint
Danke!
Benrhard
Tach Bernhard,
selber programmiere ich eigentlich nie in C, aber bis dir jemand anderes antwortet mal der Hinweis auf Pointer Arithmetik - ist sicherlich nicht sonderlich portabel aber dafür sehr fix. Du würdest über das Array iterieren und den Pointer um Sizeof(s_point) inkrementieren. Die einzelnen Werte x, y, z sind dabei ein Offset zum Beginn der Struktur, also n*sizeof(double) mit n=0..2.
Tschau,
andre
On Tue, Jan 23, 2007 at 10:15:27AM +0100, André Schulze wrote:
Tach Bernhard,
Hi,
Du würdest über das Array iterieren und den Pointer um Sizeof(s_point) inkrementieren. Die einzelnen Werte x, y, z sind dabei ein Offset zum Beginn der Struktur, also n*sizeof(double) mit n=0..2.
... das kann gewaltig in die Hose gehen, da je nach Plattform der Compiler noch padding bytes in eine Struktur einfügen darf...
Beste Lösung wäre ein Array of double zu verwenden...
Ciao, Tobias
Am Tue den 23 Jan 2007 um 03:12:04PM +0100 schrieb Tobias Koenig:
On Tue, Jan 23, 2007 at 10:15:27AM +0100, André Schulze wrote:
Du würdest über das Array iterieren und den Pointer um Sizeof(s_point) inkrementieren. Die einzelnen Werte x, y, z sind dabei ein Offset zum Beginn der Struktur, also n*sizeof(double) mit n=0..2.
... das kann gewaltig in die Hose gehen, da je nach Plattform der Compiler noch padding bytes in eine Struktur einfügen darf...
Deswegen habe ich ja auch gesagt, daß es nicht sonderlich portabel ist. Als ich vor vielen Sonnen mal mit C was gemacht habe, mußte ich auch feststellen, daß die Anordnung von Elementen einer Struktur im Speicher nicht definiert ist, also Sache des Compilers ist.
Tschau, andre
Bernhard Schiffner schrieb:
ich brauche mal die Hilfe der C-Guru-Sektion:
Ich halte mich jetzt nicht für einen Guru.
Definition: typedef struct s_point {double x, y, z;} point_t;
Code: if(l1[i].y < coord_buf){ coord_buf=l1[i].y; stelle=i; }
So und jetzt will ich das je nach Parameter "n" (völlig offen was und wie) mal für x, y, oder z machen.
Ich vermute, du willst n unterschiedliche i?
Geht das irgendwie einfach oder muß man immer mit if / case arbeiten?
Ähm, für den Fall, dass Deine Frage noch nicht beantwortet ist: Um das if kommst du nicht herum.
über i kannst Du iterieren. Und was Du mit x, y und z machen kannst, haben die anderen schon gesagt.
Tobias
lug-dd@mailman.schlittermann.de