Zwei Strukturen, A -> B

Alpha63

Mitglied
Hallo,

ich habe zwei Strukturen. Struktur Matrix und Struktur PMAT.

Ich will das PMAT alle werte von Matrix übernimmt.
Ist es irgendwie möglich den Pointer von PMAT auf Matrix zeigen zu lassen?


Mit Pointer Geschichten bin ich immer noch nicht so fit.

Danke schon mal.
 
Sind die Strukturen komplett identisch? Wenn ja, dann hilft auch ein unsauberer Cast.

Ansonsten alle Attribute händisch übernehmen.
 
ich verstehe nicht was du meinst.

Ja sie sind identisch aber haben andere Variabel Namen.
was in PMAT ein A ist, ist in Matrix ein B als Variabel.
 
C

Code:
struct SDB_matrix
    {
        int      nRows;
        int      nColumns;
        double** elem;
    };

struct SDB_pseudoMatrix
    {
        int     nRows;
        int     nColumns;
        double* elem;
    };

typedef struct SDB_matrix MATRIX;
typedef struct SDB_pseudoMatrix PMAT;

Alle Elemente die in Matrix sind sollen in PMAT sein.
Aber die Elemente in PMAT sollen nur auf Matrix zeigen (Pointer). nicht tatsächlich initialisiert haben.
 
Guten Morgen,

welchen Sinn soll das denn haben?

Wenn du nicht die wirklichen Werte in der Pseudomatrix haben willst, sondern nur auf die Werte in der "richtigen" Matrix verweisen willst, deklarier dir doch die Struktur so

C:
struct SDB_pseudoMatrix
{
    SDB_matrix *m_pHandle;
}

Davon abgesehen, ist in deiner Pseudomatrix das letzte Element nur ein Pointer, während in der "richtigen" Matrix das letzte Element ein Pointer auf einen Pointer ist.

Gruß,
Wolf
 
Hallo

Auch ich verstehe den Sinn nicht ganz.
Wenn beide Typen gleich sind (warum sollte lediglich "elem" ein anderer Typ sein?), dann nimm doch einfach einen SDB_Matrix*, um die Werte zu deferenzieren.
Und die Variablennamen sollten egal sein.
/EDIT: Die Typen sind es aber nicht.
C:
SDB_matrix mat;
SDB_pseudoMatrix* pmat = (SDB_pseudoMatrix*)&mat;
Wie ComFreek schon sagte: Das ist relativ unschön.

Gruss
cwriter

/EDIT: Noch ein kleines Beispiel. Bei dem vielen Casten geht die Übersicht aber ziemlich schnell flöten. Vielleicht könntest du sagen, was du erreichen willst, denn vielleicht gibt es ja einen sinnvolleren Weg?
C:
#include <stdio.h>
#include <stdlib.h>

struct SDB_matrix
    {
        int      nRows;
        int      nColumns;
        double** elem;
    };
 
struct SDB_pseudoMatrix
    {
        int     asd;
        int     ad2;
        double* d;
    };
 
typedef struct SDB_matrix MATRIX;
typedef struct SDB_pseudoMatrix PMAT;


int main(int argc, char* argv[])
{
	double orig = 145.0f;
	double* tmp = &orig;
	MATRIX mat;
	mat.nRows = 1;
	mat.nColumns = -15;
	mat.elem = &tmp;
	PMAT* pmat = (PMAT*)&mat;
	printf("mat:\n%d\n%d\n%f\n",mat.nRows,mat.nColumns,**mat.elem);
	printf("pmat:\n%d\n%d\n%f\n",pmat->asd,pmat->ad2,**(double**)pmat->d);
	system("PAUSE");
	return 0;
}
 
Zuletzt bearbeitet:
Zurück