Ir ao conteúdo

C++ Loop infinito não funciona


Ir à solução Resolvido por Flávio Pedroza,

Posts recomendados

Postado

Olá, gostaria de saber o motivo desse código não entrar em loop infinito.

 

#include <iostream>

using namespace std;

int main(int argc, char const *argv[])
{
    int array[] = {1,2,3,4,5};

    int* ponteiroarray = &array[4];

    int i = 4;

    while (i <= (sizeof(array) / sizeof(int)))
    {
        cout << *ponteiroarray << endl;
        parray--;
        i--;
    }
    
    cout << "Fim do loop" << endl;

    return 0;

O código imprime: 5, 4, 3, 2 ,1. Até ai tudo certo, mas fiquei intrigado porque ele não entra em loop infinito, já que ele vai diminuindo o valor da varíavel i.

  • Solução
Postado

sizeof retornar variável do tipo unsigned long,  ou std::size_t em c++. São tipos de variáveis positivas que vão de zero até um valor máximo, nunca negativas. Quando você compara com números negativos, dá erro, pois o compilador vai transformar o número negativo no tipo sem sinal, ficando um número positivo com valor alto.

Rode o exemplo abaixo para entender melhor.

#include <iostream>
using namespace std;

int main()
{
    int a = -1; //variável com sinal
    unsigned long b = 0;// variável sem sinal
    int c= 0;//variável com sinal
    
    if (a < b) cout << "a eh menor que b" << endl; //comparando signed com unsigned - erro!
    else cout << "erro???" << endl;
    
    if (a < c) cout << "a eh menor que c" << endl; //comparando signed com signed - ok!
    else cout << "erro???" << endl;
    //o que acontece quando transformo um tipo negativo em unsigned?
    cout << (unsigned long)a;
    
    return 0;
}

Em resumo, não compare números negativos com varáveis unsigned.

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!