Guten Morgen,
ich habe eine, oder sind es mehrere Fragen zur Typumwandlung. Zunächst ganz einfach:

Code:
Warum funktioniert folgender Code nicht wie erhofft ?

int* p = (char*)1000;   /* p zeigt nun auf die Speicherstelle 1000 */
(char*)p++;

p zeigt nun auf 1004 leider nicht wie erwartet auf 1001. Das "Casten" wurde anscheinend völlig ignoriert ?

und das Folgende meckert der Compiler komplett an:
void* p = (void*)1000;  

(char*)p++;   /* expression must be a pointer to a complete object type */


Erklärung was ich machen möchte:
Eine universelle Funktion schreiben, der ich lediglich eine Adresse und eine Anzahl übergebe um Daten mittels RS232 zu übertragen.
VOID möchte ich benutzen, damit ich später keine explizite Typwandlung mehr benötige. Also einen Pointer auf irgendwas übergeben kann.
So soll es aussehen:

void uart_putc(char c)
{
    /* ....... */
}

void uart_send(void* data, unsigned int size)
{
   while(size--)
      uart_putc(*(char*)data++);   /* hier gibt es das Problem */
}


Ich war ja schon fleißig und habe natürlich schon einige Versionen ausprobiert und hinbekommen
So geht es zum Beispiel:

void uart_send(void* data, unsigned int size)
{ char*p=data;

   while(size--)
      uart_putc(*p++);
}

aber wozu die unnötige, lokale Zwischenvariable "p" , ich hab doch schon meinen Pointer "data" den muss ich doch Byteweise hochzählen können.
Ich bedanke mich schon im voraus für (meinen neuen Lerneffekt) bzw. Eure Hilfe.
Siro