Pular para o conteúdo

Problema com Ponteiros [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar

1. Problema com Ponteiros [RESOLVIDO]

Enviado em 31/05/2018 - 19:40h

Boa noite!

Preciso imprimir o vetor dentro e fora da função. Mas, com o código abaixo não consigo fazê-lo em nenhum dos dois lugares. Porém, preciso fazer isto usando as variáveis de duplo ponteiros, como no código a seguir.


#include <stdio.h>
#include <stdlib.h>

void fazVetor(int **ocorr){
int vet[] = { 1, 2, 3, 4, 5};
int *pOcor;

pOcor = vet;
ocorr = &pOcor;

printf("--==[Inside Function]==--");
for(int i = 0; i < 5; i++){
printf(" %i", *(*ocorr + i));
}
}

int main()
{
int **pp;

fazVetor(pp);

printf("--==[Outside Function]==--");
for(int i = 0; i < 5; i++){
printf(" %i", *(*pp + i));
}

return 0;
}


Se alguém puder ajudar, será de grande valia.

De antemão, muito obrigado!


Edwar Saliba Jr.

Responder tópico

2. Re: Problema com Ponteiros [RESOLVIDO]

Enviado em 31/05/2018 - 20:51h

Boa noite!

Se você quer que uma variável seja modificada por uma função então você tem que passar o ponteiro dessa variável para a função. Se essa variável é um ponteiro duplo, então a função recebe um ponteiro triplo:


#include <stdio.h>

void fazVetor(int ***ocorr){
int vet[] = { 1, 2, 3, 4, 5};
int *pOcor;

pOcor = vet;
*ocorr = &pOcor;

printf("--==[Inside Function]==--\n");
for(int i = 0; i < 5; i++){
printf(" %i", *(**ocorr + i));
}
printf("\n--=====================--\n\n");
}

int main()
{
int **pp;

fazVetor(&pp);

printf("--==[Outside Function]==--\n");
for(int i = 0; i < 5; i++){
printf(" %i", *(*pp + i));
}
printf("\n--=====================--\n");
return 0;
}



3. Re: Problema com Ponteiros

Enviado em 31/05/2018 - 23:26h

mattfly escreveu:

Boa noite!

Se você quer que uma variável seja modificada por uma função então você tem que passar o ponteiro dessa variável para a função. Se essa variável é um ponteiro duplo, então a função recebe um ponteiro triplo:


#include <stdio.h>

void fazVetor(int ***ocorr){
int vet[] = { 1, 2, 3, 4, 5};
int *pOcor;

pOcor = vet;
*ocorr = &pOcor;

printf("--==[Inside Function]==--\n");
for(int i = 0; i < 5; i++){
printf(" %i", *(**ocorr + i));
}
printf("\n--=====================--\n\n");
}

int main()
{
int **pp;

fazVetor(&pp);

printf("--==[Outside Function]==--\n");
for(int i = 0; i < 5; i++){
printf(" %i", *(*pp + i));
}
printf("\n--=====================--\n");
return 0;
}




Boa noite mattfly!

Primeiramente, muito obrigado por responder minha dúvida!

Eu executei o seu código e vi o seguinte:

- dentro da função "fazVetor" os números 1, 2, 3, 4 e 5 são impressos perfeitamente,

- porém na função "main" eles não aparecem.

Parece que o que está sendo impresso na função "main" são os endereços de memória de cada célula do vetor ou então lixo, como se a variável "pp" não estivesse apontando para o vetor que foi criado dentro da função "fazVetor".

Eu executei no Code::Blocks 17.12.

Mais uma vez, muito obrigado!

4. Re: Problema com Ponteiros

Enviado em 03/06/2018 - 18:04h

Senhores, o problema está resolvido. E devo todo o mérito ao meu companheiro do CEFET-MG, Evandro Caldeira, que solucionou o problema.

Segue o código:


#include <stdio.h>
#include <stdlib.h>
#define TAM 3

int fazVetor(int **vet){
int *array = (int *) malloc(sizeof(int) * TAM);

array[0] = 4;
array[1] = 7;
array[2] = 8;

*vet = array;
}

int main()
{
int *qq;

fazVetor(&qq);

printf("\n--==[Outside Function]==--\n\n");
for(int i = 0; i < TAM; i++){
printf(" %d", (qq[i]));
}

printf("\n\n");
return 0;
}


A todos vocês que dedicaram seu precioso tempo na tentativa de solucionar este problema, deixo aqui meus sinceros agradecimentos.


Edwar Saliba Jr.


Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder