• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

chharlie

duvida de strings

10 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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) .

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

aqui uma pergunta para os "sabões" do fórum. Qual o valor de a no fim do seguinte excerto de código C?

a=2;
b=3;
a=b+a++;

:biggrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

6?

6 porque .... ??? o a++  devolve primeiro o valor de a e depois o incrementa. logo devolve primeiro o 2..

quem diz diferente?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

Correcto

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

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