Lembre-se de que, em C, oposto a C ++, Java ou outras linguagens de alto nível, não existe nenhum tipo de dados de string e a maioria das strings é representada apenas por arrays de caracteres. O nome da variável de uma matriz é simplesmente o ponteiro para o início da matriz.
O que você está fazendo no seu exemplo é, na verdade, subtrair o ponteiro para a
do ponteiro para b
e, em seguida, converter esse valor resultante (ponteiro) em um inteiro. Por que o valor retornado é -16 não sei. Provavelmente isso é apenas o tamanho dos blocos de memória na pilha que são alocados de uma vez (cuidado, pura especulação).
Para subtrair caracteres um do outro, você precisa realmente acessá-los, usando a[i]
ou *(a+i)
para o caracter i th na matriz char.
Fyi, o valor da subtração do ponteiro não é aleatório, mas mais ou menos arbitrário, pois os endereços das matrizes a[]
e b[]
podem diferir de SO para SO e de compilador para compilador. Eu apenas tentei o seu programa no PC que eu estou atualmente, o Debian Wheezy 64 bit, e o resultado é -16. Então eu tentei o mesmo código no Xubuntu 12.04 32bit e o resultado é 5.