Diese drei Zeilen sind in Standard C fischig. Und ich denke deine C
Version unterscheidet sich bei den Pointern nicht, musst du aber
nachsehen.
while(1) {serDwrite(*s,11);} // 1
pointer=&s1; // 2
SerDwrite(*pointer); // 3
1:
s ist laut Argumentliste der aufrufenden Funktion ein int *. *s ist
somit ein int. Es sträuben sich einfach die Nackenhaare des
Programmierers, weil man den Aufruf üblicherweise mit Pointerübergabe
programmiert. Daher auch die Frage nach dem Prototypen.
2:
pointer ist ein int *. S1 ist ein char []. &s1 ist somit ein char **
und die Zuweisung an pointer ist nicht OK. Ich denke es ist char
*pointer = s1; oder char * pointer = &s1[0]; gemeint.
3:
Gleicher Fall wie 1 nur dass man weiss, dass der Typ vom Argument nicht
passt.
Das fehlende Nullbyte bei s1 ist möglicherweise unkritisch (aber sehr
unschön), jenachdem wie serDwrite() programmiert ist. Das zweite
Argument 11 verhindert möglicherweise einen ansonsten vorprogrammierten
Bufferoverflow.