Jump to content

duvida de strings


chharlie

Recommended Posts

tenho aqui uma duvida

imaginemos uma string "ABCDEF" que supostamente vai ficar armazenada num array desta maneira A,B,C,D,E.F.\0

começando no fim do array s e com o indice j ao fazer

s[j--] em que posiçao estou?

se fizer s[--j] vou ter o mesmo resultado ou um resultado diferente?

para s[j++] e s[++j] passa-se o mesmo? representam a mesma posiçao ou posiçoes diferentes?

obrigado a quem me ajudar

cumps

Link to comment
Share on other sites

Resposta curta: não.

Os operadores ++ e -- aumentam/reduzem o valor da variável em 1 unidade e o seu comportamento depende da posição em que os colocas. Se os colocares antes, eles alteram a variável e é esse valor alterado que entra na expressão, se os colocas antes, o valor da variável entra na expressão e só depois é que ela é alterada.

Exemplo:

int main() {
   char str[]="ABC";
   int i=1;
   printf("Caso 1:\n");
   printf("Caracter: %c",str[i--]);
   printf("i: %d",i);
   int i=1;
   printf("Caso 2:\n");
   printf("Caracter: %c",str[--i]);
   printf("i: %d",i);
   return 0
}

Caso 1

Caracter: B

i: 0

Caso 2

Caracter: A

i: 0

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Uma explicação simples para o funcionamento dos operadores antes e depois da variável é a seguinte:

Em j++, como a variável vem em 1º, o valor dela é devolvido e em seguida os operadores entram em funcionamento e incrementam o valor de j.

Em ++j, como os operadores vem em 1º, o valor de j é incrementado e em seguida vem a variável e então é devolvido o valor dela (já actualizado pelos operadores) .

"Lamento... Detectou mais de dez mil ficheiros infectados..."

Link to comment
Share on other sites

Sim eu sei, dei-me ao trabalho de verificar uma tabela das precedências dos operadores, mas o resultado final dá 6, certo?

Certo e errado

O resultado é 3, 5 ou 6. Depende do compilador. O standard não especifica se o efeito do ++ acontece antes da atribuição ou depois. Aqui há algumas versões do gcc atrás, -O3 dava comportamento diferente de -O[012]

se ++ antes do =

fica

3+2 como resultado da conta

3 como valor calculado para ser guardado em a

a passa a ser 3 devido ao ++

a passa a ser 5 devido ao =

se o = antes do ++

3+2 como resultado da conta

3 como valor calculado para ser guardado em a

a passa a ser 5 devido ao =

a passa a ser 3 devido ao ++

como o gcc implementa agora:

resultado da conta 2+3

guarda em a

incrementa a

a = 6

Tharis Fan ClubMay Tharis bless you
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.