In C wird gesagt, dass, wenn Zeiger auf dasselbe Array oder ein Element nach dem Ende dieses Arrays verweisen, die Arithmetik und Vergleiche gut definiert sind. Was ist dann mit einem vor dem ersten Element des Arrays? Ist es in Ordnung, solange ich es nicht dereferenziere?
Gegeben
int a[10], *p;
p = a;
(1) Ist das Schreiben legal --p
?
(2) Ist es legal, p-1
in einem Ausdruck zu schreiben ?
(3) Wenn (2) in Ordnung ist, kann ich das behaupten p-1 < a
?
Hierfür gibt es einige praktische Bedenken. Stellen Sie sich eine reverse()
Funktion vor, die einen C-String umkehrt, der mit endet '\0'
.
#include <stdio.h>
void reverse(char *p)
{
char *b, t;
b = p;
while (*p != '\0')
p++;
if (p == b) /* Do I really need */
return; /* these two lines? */
for (p--; b < p; b++, p--)
t = *b, *b = *p, *p = t;
}
int main(void)
{
char a[] = "Hello";
reverse(a);
printf("%s\n", a);
return 0;
}
Muss ich den Code wirklich einchecken?
Bitte teilen Sie Ihre Ideen aus sprachrechtlicher / praktischer Sicht mit und wie Sie mit solchen Situationen umgehen würden.