www.mikrocontroller.net

Forum: PC-Programmierung char zeiger auf int zeiger


Autor: Carolin Zapa (seobalis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich habe eine doppelzeiger. Die sollen auf eine iht zeiger zeigen wie 
folgt:
int array[10];
int *ptr;
char **dptr;

ptr = array;// ptr zeige auf array

// so habe ich mir gedacht aber dann bekomme ich Fehlermeldung.
dptr = (char)&ptr;


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

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int array[10];
int *ptr;  // kann auf eine int zeigen
int **dptr; // kann auf einen int-Zeiger zeigen

ptr = array; // ptr zeige auf erstes array-Element

// so hast du dir vielleicht gedacht, jedenfalls ohne Fehlermeldung.
dptr = &ptr;

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Carolin Zapa (seobalis)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel F. (df311)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohne garantie und test, könnte funktionieren:
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)

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Je nach C-Standard: Einfach casten:
uint32_t array[10];
send(socket, (char *) array, 10 * sizeof(uint32_t));

Oder einfach übergeben:
uint32_t array[10];
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

int array[10];

...

  send( socket, (char*)test, sizeof(test) );

Autor: Carolin Zapa (seobalis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antworte. Die haben mir sehr geholfen.

Gruß,
Carolin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.