No código a seguir, preciso imprimir os valores que estão no vetor, dentro da função “fazVetor” e também dentro da função “main”. Contudo, preciso fazê-lo utilizando as variáveis de duplo ponteiro, como está no código. Porém, este código não funciona e eu não sei o porquê.
#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;
}
Na verdade não dá erro algum, somente não imprime ou imprime endereços de memória. Esta é a versão reduzida, assim digamos, do código que eu estou trabalhando.
Seguindo sua dica, fiz o seguinte:
#include <stdio.h>
#include <stdlib.h>
#define TAM 3
void fazVetor(int **vet){
int *array = malloc(sizeof(int) * TAM);
array[0] = 4;
array[1] = 7;
array[2] = 8;
/* Nesta função somente a linha a seguir pode ser alterada. */
*vet = &array;
}
int main()
{
int **qq;
/* Aqui na função main, somente a linha a seguir NÃO PODE ser alterada. */
fazVetor(&qq);
printf("\n--==[Outside Function]==--\n\n");
for(int i = 0; i < TAM; i++){
printf(" %d", (*qq + i));
}
printf("\n\n");
return 0;
}
Se puder me ajudar será de grande valia!
No código acima estipulei, por meio de comentários, duas regrinhas. Se alguém quiser ajudar e para que não se fuja do problema real, estas regrinhas devem ser respeitadas.
O meu único objetivo é imprimir os valores do vetor criado na função “fazVetor”.
Na verdade aqui na minha máquina até mostra alguma coisa, só mostra coisas “erradas”:
--==[Outside Function]==--
0 4 8
O problema é que seu código tá uma goroba de mistura de tipos! rs
Veja os warnings!
Vou te dar uma dica sobre a linha:
O tipo da variável vet é int**, o tipo da variável array é int*.
Assim, na linha da atribuição que citei acima, o tipo de *vet é int*, mas o tipo de &array é int**, que a linguagem C deixa atribuir, mas provavelmente não é o que você quer.
Você quer atribuir a *vet o valor de array, que ambos como já falei, são int*. Ou seja, *vet = array;
Com isso a função fazVetor() faz o que você quer. Mas no main() há ainda problemas do mesmo tipo, mistura de tipos errados, como passar um int*** quando você quer passar um int**, por exemplo. Use o mesmo tipo análise pra corrigir isso.