Jump to content
chharlie

duvida de strings

Recommended Posts

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


CT

Share this post


Link to post
Share on other sites
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

 


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
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) .


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

Share this post


Link to post
Share on other sites
edsousa

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++;

:cheesygrin:


Tharis Fan ClubMay Tharis bless you

Share this post


Link to post
Share on other sites
edsousa

6?

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

quem diz diferente?


Tharis Fan ClubMay Tharis bless you

Share this post


Link to post
Share on other sites
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.


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
Baderous

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

Share this post


Link to post
Share on other sites
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


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
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


Tharis Fan ClubMay Tharis bless you

Share this post


Link to post
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.