Ir ao conteúdo
  • Cadastre-se
sandrofabres

C++ Quero fazer uma função que mude a variável do parâmetro passado

Posts recomendados

Em primeiro lugar eu queria saber qual o nome da prática de se mudar o valor da variável-parâmetro da função via ponteiro, por acaso seria Bypass? Gente, sou novato e não sei.
Vou ser sincero, pra programação simples, a única utilidade prática dos ponteiros, pra mim  , é enganar o tipo char quando se precisa fazer uma string que na verdade é um array de letrinhas. Eu sei que C++ é baseada nos tempos onde o programador precisava criar apps que precisavam calcular bit a bit para as coisas, hoje em dia isso ficou mais para programação de drivers , mesmo assim as esquisitices do C/C++ ficaram, vide o parto que é a conversão de tipos e o uso de array pra camuflar um 'tipo string' verdadeiro.  

 

Pensando nisso eu gostaria de achar mais utilidades práticas para o ponteiro na minha vida, então fiz o seguinte modelo que não deu certo :

 

int bEleitor = 17;
Petismo(&bEleitor);
void Petismo(int *bEleitor)
{
    int *lula = &bEleitor;
    *lula = 13;
} 

// onde cout << bEleitor <<endl; deveria imprimir 13 e não 17 apos rodar-se a função Petismo(bEleitor);

Com isso eu poderia retornar várias informações de uma vez só, sem precisar return, algumas APIs do windows gostam de fazer isso, eu queria fazer também, porém o exemplo acima não funcionou dando o erro: In function 'void Petismo(int*)': 8:21: error: cannot convert 'int**' to 'int*' in initialization. Como a função acima funcionaria para mudar um valor de uma variável sem precisar usar return e nem variáveis 'globais'?

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

void Petismo(int *bEleitor) esta esperando uma direção e não o valor da variável, o correto é chama-la assim-> Petismo(&bEleitor). Mas me da que você ja sabe isso e quer abrir debates, como das outras vezes... Toma-lo ou deixa-lo.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, vangodp disse:

void Petismo(int *bEleitor) esta esperando uma direção e não o valor da variável, o correto é chama-la assim-> Petismo(&bEleitor). Mas me da que você ja sabe isso e quer abrir debates, como das outras vezes... Toma-lo ou deixa-lo.

 

Muito bem, figura risonha sinistra! Você estava certa!

 

Refiz o programa acima e funcionou usando o E comercial.  O deixei assim:


 

#include <iostream>
#include <string>
using namespace std;


void Petismo(int *eleitor)
{
   int *lula = eleitor;
   *lula = 13;
}    

int main()
{
   int bEleitor = 17;
   // mudando o valor de bEleitor usando ponteiro ao invés de return
   Petismo(&bEleitor);
   // imprimindo o valor alterado depois de se chamar o método Petismo()
   cout << bEleitor << endl;
   
   return 0;
}

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se em uma variável você faz assim:
int x;
int *ptr;
ptr = &x;
Nos parâmetros é a mesma coisa:
int x;
void foo(int *ptr){...}
int main(){
foo(&x);

...

adicionado 1 minuto depois

foo(&x) equivale a fazer ptr = &x;

adicionado 1 minuto depois

Até a próxima homem vintage.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, vangodp disse:

Se em uma variável você faz assim:
int x;
int *ptr;
ptr = &x;
Nos parâmetros é a mesma coisa:
int x;
void foo(int *ptr){...}
int main(){
foo(&x);

...

 

Muito bom! Agora eu achei uma utilidade prática para os ponteiros.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 horas atrás, sandrofabres disse:

dando o erro: In function 'void Petismo(int*)': 8:21: error: cannot convert 'int**' to 'int*' in initialization

 

Atente para o que está escrito na mensagem de erro

 

Veja o código

void Petismo(int *bEleitor)
{
    int *lula = &bEleitor;
    *lula = 13;
} 

Isso dá na mesma que escrever

int* bEleitor;
int* lula;

mas ao escrever desse modo ajuda a ler que bEleitor é um ponteiro para int e lula é um ponteiro para int.

  • Quando você escreveu &bEleitor está buscando o endereço de um ponteiro para int, e o resultado então seria int**
  • E quando você escreve *lula = &bEleitor está atribuindo a um int* um valor int**, que é exatamente o que diz a mensagem de erro.
     

E não há razão para declarar outra variável, já que poderia escrever simplesmente

*bEleitor = 13;

 

Em geral é melhor descobrir o que está errado do que ir mudando a olho até parecer certo.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...

montagem2018-capa-newsletter2.jpg

PROMOÇÃO DE QUARENTENA

De R$ 39,90 por apenas R$ 19,90 só até as 23h59min deste domingo 29/03/2020

CLIQUE AQUI E COMPRE AGORA MESMO!