Forum: PC-Programmierung char zeiger auf int zeiger


von Carolin Z. (seobalis)


Lesenswert?

Hallo Leute,

ich habe eine doppelzeiger. Die sollen auf eine iht zeiger zeigen wie 
folgt:
1
int array[10];
2
int *ptr;
3
char **dptr;
4
5
ptr = array;// ptr zeige auf array
6
7
// so habe ich mir gedacht aber dann bekomme ich Fehlermeldung.
8
dptr = (char)&ptr;

Es wäre sehr nett, wenn ihr mir sagen könnte wie ich in diesem Falls 
scheriben soll

von Sven P. (Gast)


Lesenswert?

Carolin Zapa wrote:
> int array[10];
> int *ptr;
> char **dptr;
>
> ptr = array;// ptr zeige auf array
Nee, er zeigt auf einen Vektor, das is (manchmal) was Anderes.

> // so habe ich mir gedacht aber dann bekomme ich Fehlermeldung.
> dptr = (char)&ptr;
Was soll das denn werden?

von Klaus W. (mfgkw)


Lesenswert?

1
int array[10];
2
int *ptr;  // kann auf eine int zeigen
3
int **dptr; // kann auf einen int-Zeiger zeigen
4
5
ptr = array; // ptr zeige auf erstes array-Element
6
7
// so hast du dir vielleicht gedacht, jedenfalls ohne Fehlermeldung.
8
dptr = &ptr;

was du damit vorhaben könntest, bleibt mir allerdings irgendwie 
verborgen...

von Karl H. (kbuchegg)


Lesenswert?

Carolin Zapa wrote:

> Es wäre sehr nett, wenn ihr mir sagen könnte wie ich in diesem Falls
> scheriben soll

Hmm.
Das was du da vorhast, ist ziemlich sinnfrei.
Scheint so, als ob dich die Sprache bzw. der Compiler vor einer Dummheit 
bewahrt.
Also: Was hast du eigentlich vor? Wozu brauchst du das Ganze?

von Carolin Z. (seobalis)


Lesenswert?

ich habe ein int32 array[10] und er hat ein int32 ptr zu testen. Nach 
dem Test wollte ich das mit TCP senden.

Die send funkt versteht aber nur send(socket, char*, length).

Also habe ich mir gedacht dass ich ein doppelpointer benutzen kann in 
diesem fall.

Gruß,
Carolin

von Daniel F. (df311)


Lesenswert?

ohne garantie und test, könnte funktionieren:
1
send(socket, (char*) intptr, sizeof(int32));

sonst musst du nur einen weg finden, einen int32 in ein char-array zu 
zerlegen und wieder zusammenzusetzen. (tipp: etwas ähnliches wurde in 
letzter zeit hier im forum diskutiert)

von Sven P. (Gast)


Lesenswert?

Je nach C-Standard: Einfach casten:
1
uint32_t array[10];
2
send(socket, (char *) array, 10 * sizeof(uint32_t));

Oder einfach übergeben:
1
uint32_t array[10];
2
send(socket, array, 10 * sizeof(uint32_t));

Als es noch kein void gab, war char der 'Alles'-Typ, daher gehts 
mitunter ohne Cast.

Sinnvoller wärs allerdings, Byte-Order-Kram zu benutzen, sonst 
versendest du Datenmüll. So von wegen htonl und umgekehrt.

von Karl H. (kbuchegg)


Lesenswert?

Carolin Zapa wrote:
> ich habe ein int32 array[10] und er hat ein int32 ptr zu testen. Nach
> dem Test wollte ich das mit TCP senden.

Was wolltest du senden?
Das int Array?

> Die send funkt versteht aber nur send(socket, char*, length).

Sieh das char* in diesem Fall als: "Egal worauf der Pointer zeigt, ich 
sende von dort beginnend length Bytes"

In neuerem C wäre das ein void Pointer, aber aus historischen Gründen 
wurde das wohl auf einem char Pointer belassen. Es spricht also nichts 
dagegen, das man sich den Pointer auf den Datentyp zurechtcastet, den 
die send Funktion haben will.

1
int array[10];
2
3
...
4
5
  send( socket, (char*)test, sizeof(test) );

von Carolin Z. (seobalis)


Lesenswert?

Danke für die schnelle Antworte. Die haben mir sehr geholfen.

Gruß,
Carolin

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.