ERRO ISO proíba a comparação entre ponteiro e inteiro

ERRO ISO proíba a comparação entre ponteiro e inteiro
Este artigo é sobre um erro que geralmente ocorre enquanto compara ponteiros e números inteiros. Antes de seguir para o nosso tópico, devemos saber o que é ISO. ISO significa Organização Internacional de Padrões. Esta empresa desenvolve e publica padrões internacionais. Enquanto a programação na linguagem C ++, geralmente recebemos esse erro que ISO proíbe a comparação entre ponteiro e número inteiro. Este erro também ocorre em outros idiomas, como a linguagem C. A questão principal surge sobre por que a ISO não permite comparações entre ponteiros e inteiros.

A resposta é que, na linguagem C ++, quando um programador tenta comparar dois tipos de dados diferentes, o sistema lançará o erro de comparação. Portanto, um número inteiro é um tipo de dados diferente e um ponteiro é um endereço de memória. Portanto, o compilador dará um erro porque ambos são diferentes tipos de dados. Este erro não apenas ocorre enquanto compara ponteiros e números inteiros, mas também que tentamos comparar duas variáveis ​​de diferentes tipos de dados.

Sintaxe

É uma mensagem de erro para não ter sintaxe, mas podemos mostrar como é esse erro:

Erro: ISO C ++ proíbe a comparação entre ponteiro e inteiro [-fpermissive]

Exemplo # 01:

Agora, para entender o erro em profundidade, realizaremos um exemplo no qual compararemos nossa variável com um tipo de dados diferente e veremos se o sistema lança algum erro ou não. Para esse fim, declaramos uma matriz de personagens chamada "x" com um comprimento de 5. Imprimimos nossas mensagens para a legibilidade do usuário. Agora, se dermos uma olhada na linha número 4, veremos que estamos comparando nossa variável com a palavra 'olá'. O objetivo do nosso código é se os valores de nossa variável e correspondência de valor passada. O compilador deve entrar na condição if. Depois disso, o compilador retornará (0) e sairá com sucesso do nosso código. Agora, vamos executar nosso código.

#incluir
usando namespace std;
char x [5];
cout x;
se (x == 'olá')

cout<<"Hi How are You";

retornar (0);

Depois de executar nosso código, receberemos o seguinte erro do nosso compilador como resultado. Se olharmos atentamente para a mensagem de erro, podemos ver que o compilador apontou um erro na linha 7. Esta é a linha em que estávamos tentando comparar nossa variável com um valor "Olá". O compilador leva strings ou personagens em citações duplas como ("Olá"). Mas aqui passamos o valor em citações únicas como ('olá'). Portanto, os tipos de dados não correspondem e o compilador reconhece nosso valor aprovado como um ponteiro. Por causa de tudo isso, o compilador não será capaz de fazer uma comparação entre eles e lançará um erro que podemos ver na figura abaixo na cor vermelha.

Agora, vamos tentar resolver o erro e executar com sucesso nosso código. Para esse fim, no nosso caso, teremos que alterar apenas o valor aprovado de 'olá' para “olá” para que o sistema o reconheça como um personagem. Vamos simplesmente mudar citações únicas com citações duplas. Depois disso, vamos executar nosso código.

Depois de executar nosso código, a figura acima é como será a nossa saída. O compilador executou com sucesso nosso código e imprimiu o que pedimos para imprimir. Depois disso, nos mostra a mensagem de que o programa terminou com o código de saída 0 porque, finalmente, retornamos 0 da nossa função principal. Então, podemos ver que, passando apenas o tipo de dados correto, resolvemos nosso problema.

Exemplo # 02:

No exemplo anterior, explicamos como o compilador lança um erro. Mas não tomamos um número inteiro como nossa variável. Vamos pegar um número inteiro e tentaremos compará -lo com o ponteiro. Para fazer isso, inicializamos uma matriz "eu" com 1 comprimento. Declaramos outra variável r que é um número inteiro e passamos o valor 4. Queremos ver se os valores correspondem ao sistema deve retornar 1 e se não forem iguais, o sistema retornará 0. Então, vamos executar nosso código para ver o que acontece.

#incluir
#incluir
usando namespace std;
int main ()

int i [1];
int r = 4;

se eu != r)

retornar (0);

outro
retornar (1);


Após a execução do nosso código, esta é a saída. O sistema nos deu o erro mais uma vez. Nesse caso, está na linha 10. Se voltarmos e olharmos para o nosso código, veremos isso na linha 10, estamos comparando nossa matriz com nosso número inteiro. Não especificamos que índice estamos comparando. Então, o sistema comparará toda a memória com nosso número inteiro. Em nosso código, a memória será um ponteiro. O sistema nos dará o erro devido a este tipo de dados inconsistente.

Agora, vamos resolver o erro. Para fazer isso, simplesmente diremos o comprimento de nossa matriz ao sistema. Para isso, substituiremos o "eu" por "i [1]" para que o sistema retire o número inteiro do índice de nossa matriz e compare esse número inteiro com nosso número inteiro declarado personalizado que é "r".

Agora, na imagem acima, podemos ver que nosso código é executado com sucesso e devolvido para nós 0. Isso significa que eu [1] não é igual a r. Mas o principal é que o erro é resolvido e o código é compilado e executado com sucesso. Se os valores fossem os mesmos, o sistema teria retornado 1.

Conclusão

Neste guia, discutimos um erro que ocorre ao escrever o código. Explicamos por que esse erro ocorre, quais erros um programador comete o que levou a esse erro e como evitar e resolver o erro. Também realizamos exemplos diferentes e tentamos obter esse erro em diferentes condições. Depois disso, resolvemos os erros e apontamos os erros em nosso código para ajudá -lo a entender melhor.