chharlie Posted November 2, 2009 at 07:06 PM Report Share #294390 Posted November 2, 2009 at 07:06 PM 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 More sharing options...
pedrosorio Posted November 2, 2009 at 07:15 PM Report Share #294391 Posted November 2, 2009 at 07:15 PM 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 More sharing options...
S7sRuss Posted November 3, 2009 at 01:42 PM Report Share #294483 Posted November 3, 2009 at 01:42 PM 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 More sharing options...
edsousa Posted November 3, 2009 at 01:56 PM Report Share #294489 Posted November 3, 2009 at 01:56 PM 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++; 😁 Tharis Fan ClubMay Tharis bless you Link to comment Share on other sites More sharing options...
Baderous Posted November 3, 2009 at 07:39 PM Report Share #294557 Posted November 3, 2009 at 07:39 PM 6? Link to comment Share on other sites More sharing options...
edsousa Posted November 3, 2009 at 07:54 PM Report Share #294565 Posted November 3, 2009 at 07:54 PM 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 Link to comment Share on other sites More sharing options...
pedrosorio Posted November 3, 2009 at 07:56 PM Report Share #294566 Posted November 3, 2009 at 07:56 PM 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. Link to comment Share on other sites More sharing options...
Baderous Posted November 3, 2009 at 09:04 PM Report Share #294577 Posted November 3, 2009 at 09:04 PM Sim eu sei, dei-me ao trabalho de verificar uma tabela das precedências dos operadores, mas o resultado final dá 6, certo? Link to comment Share on other sites More sharing options...
pedrosorio Posted November 3, 2009 at 09:29 PM Report Share #294580 Posted November 3, 2009 at 09:29 PM 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. Link to comment Share on other sites More sharing options...
edsousa Posted November 4, 2009 at 10:04 AM Report Share #294654 Posted November 4, 2009 at 10:04 AM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now