Problema com Ponteiros [RESOLVIDO]

1. Problema com Ponteiros [RESOLVIDO]

Edwar Saliba Júnior
eddiesaliba

(usa Debian)

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.


  


2. Re: Problema com Ponteiros [RESOLVIDO]

Matheus
mattfly

(usa Outra)

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

Edwar Saliba Júnior
eddiesaliba

(usa Debian)

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

Edwar Saliba Júnior
eddiesaliba

(usa Debian)

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.








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts