Ir para o conteúdo
chharlie

duvida de strings

Mensagens Recomendadas

chharlie    0
chharlie

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

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

 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
S7sRuss    0
S7sRuss

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) .

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

6?

Curioso. O a só é incrementado depois de toda a expressão ser avaliada. Por acaso sempre imaginei que na expressão o valor do "a" era substituído e que imediatamente a seguir a variável era incrementada.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

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

Correcto

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
edsousa    0
edsousa

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade