Pointer

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
SeriK00
Beiträge: 34
Registriert: Fr Mai 15, 2009 12:15 pm

Pointer

Beitrag von SeriK00 » Fr Mai 15, 2009 12:22 pm

Guten Tag liebe C-Gemeinde.
Ich bingerade beim schwierigen thema angelang und komme hier nicht weiter.


Ich habe eine structur

Code: Alles auswählen

typdef struct
{
     int length;
      unsigned char data[128];
      unsigned char *pointer_data;
} STRUCT_TYPE;
Jetzt will ich den Pointer auf das erste Element in data-Array setzen.
int length und eins reduzieren und pointer erhöhren.

Ich habe mir das so überlegt:

Code: Alles auswählen

ser_transmit(STRUCT_TYPE * ptr_data)
{
  	ptr_data->lenght = 0;
	ptr_data->pdata;
	ptr_data->data[0];  //DEFINE  
}
/* edit by Kerli: Codetags eingefügt */
Windows XP Prof
Visual Studion 2005
Keil µVision 3

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Pointer

Beitrag von Kerli » Fr Mai 15, 2009 12:44 pm

Hallo, willkommen bei uns im Forum.
SeriK00 hat geschrieben:Ich bingerade beim schwierigen thema angelang und komme hier nicht weiter.
Nur so aus Interesse: Wie hast du uns denn gefunden und hast du schon unser Tutorial gesehen bzw. verwendet?

Wenn nicht kann ich dir einmal empfehlen die Artikel über Zeiger und ev. auch über Strukturen zu lesen.
SeriK00 hat geschrieben:Jetzt will ich den Pointer auf das erste Element in data-Array setzen.
Dazu musst du die Adresse des ersten Elements im Array in den Zeiger schreiben. Diese Adresse erhältst du mit dem Adressoperator (&). Also zb:

Code: Alles auswählen

ptr_data->pointer_data = &ptr_data->data[0];
Was willst du denn mit diesem Code eigentlich machen?

edit: @SeriK00: Bitte schreib Codeteile in Zukunft in Codetags. Das haltet die Beiträge übersichtlich...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

SeriK00
Beiträge: 34
Registriert: Fr Mai 15, 2009 12:15 pm

Re: Pointer

Beitrag von SeriK00 » Fr Mai 15, 2009 1:04 pm

Code: Alles auswählen

typdef struct
{
     int length;
      unsigned char data[128];
      unsigned char *pointer_data;
} STRUCT_TYPE;

Code: Alles auswählen

eintragen(SER_SEND_TYPE *ptr_data)
{
  	ptr_data->lenght = 128;
	ptr_data->pdata;
	ptr_data->&data[lenght];  //adresse des 1. element im array in den Zeiger schreiben 
}
Das 1. Element zuweisen:

Code: Alles auswählen

SER_SEND_TYPE.data[lenght] = 'A';
length--;   	//Länge des Array reduzieren
*pdata++;	auf das nächste freie Feld zeigen	

Code: Alles auswählen

Das 2. Element zuweisen
SER_SEND_TYPE.data[lenght] = 'B';
length--;   	//Länge des Array reduzieren
*pdata++;	auf das nächste freie Feld zeigen
Wäre das so richtig?
Wielen Dank im Voraus.
Windows XP Prof
Visual Studion 2005
Keil µVision 3

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Pointer

Beitrag von Dirty Oerti » Fr Mai 15, 2009 1:42 pm

So weit ich das verstehe: Nein.
eintragen(SER_SEND_TYPE *ptr_data)
{
ptr_data->lenght = 128;
ptr_data->pdata;
ptr_data->&data[lenght]; //adresse des 1. element im array in den Zeiger schreiben
}
Was ist das?

Die zweite und dritte Anweisung ergeben (für mich zumindest) keinen Sinn.
Wenn dann:
eintragen(SER_SEND_TYPE *ptr_data)
{
ptr_data->lenght = 128;
ptr_data->pdata = &(ptr_data->data[lenght]); //adresse des 1. element im array in den Zeiger schreiben
}
Dein Zeiger ist aber ansonsten ziemlich unnütze.
Den verwendest du ja gar nicht...

Außerdem: Du stellst die Elemente "in der falschen Reihenfolge" in den Speicher.
Du kannst es natürlich so machen, allerdings musst du dann den Speicher auch wieder richtig auslesen.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Pointer

Beitrag von Kerli » Fr Mai 15, 2009 4:35 pm

Zuerst einmal vermischt du da irgendwelche Codeteile, da deine Variablen jedesmal anders heißen. Und zweitens wäre es wahrscheinlich sinnvoller dich zuerst noch etwas mit Arrays und dann getrennt mit Zeigern zu beschäftigen und erst wenn du beides verstanden hast auch kombiniert.

Außerdem kommt mir vor das du auf zwei Arten in das Array schreiben willst. Einerseits mit dem Index und andererseits mit einem Zeiger. Schau auch bitte hierzu ins Wiki und im speziellen zum Teil über Arrays.

Und vermeide bitte so etwas:
SeriK00 hat geschrieben:

Code: Alles auswählen

*pdata++;
Wer gerade nicht die Rangfolge der Operatoren im Kopf hat weiß nicht ob zuerst der Dereferenzierungsoperator (*) oder der Inkrementoperator (++) angewendet wird. Und bei dir würde ich vermuten, dass du es nicht weißt ;)
Ich hab sicherheitshalber auch noch einmal nachgeschlagen und hier hast du sogar Glück gehabt, da zuerst '++' ausgeführt wird und daher wirklich der Zeiger um eins erhöht wird und dann mit dem '*' der Wert dereferenziert wird, was hier aber nichts mehr bewirkt.

Und was auch noch wichtig ist, schreibe oder lese nie über Arraygrenzen hinaus! Bei einem Array mit 128 Elementen gehen die Indizes von 0 bis 127!.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten