Diz-se em C que quando os ponteiros se referem à mesma matriz ou a um elemento após o final dessa matriz, a aritmética e as comparações são bem definidas. Então, que tal um antes do primeiro elemento da matriz? Tudo bem desde que eu não desreferencie isso?
Dado
int a[10], *p;
p = a;
(1) É legal escrever --p
?
(2) É legal escrever p-1
em uma expressão?
(3) Se (2) estiver correto, posso afirmar isso p-1 < a
?
Existe alguma preocupação prática para isso. Considere uma reverse()
função que reverte uma string C que termina com '\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;
}
Eu realmente preciso fazer a verificação no código?
Por favor, compartilhe suas idéias do ponto de vista jurídico / jurídico, e como você lidaria com essas situações.