P_E_D_R_O Posted November 25, 2007 at 05:07 PM Report Share #150265 Posted November 25, 2007 at 05:07 PM Boas pessoal, É a primeira vez que escrevo aqui por isso, gostaria de dar os parabéns pela criação deste forum. 😁 A minha dúvia está relacionada com os ponteiros de ponteiros ?. Depois de pesquisar na net surgiu-me outra questão. O que faz o int ** no malloc? Ou seja, se tivessemos só int * significava que queriamos alocar memória para uma variável, etc do tipo inteiro. Agr a minha questão é, o que faz o int ** como está aqui: p = (int **)malloc(sizeof(int *)); Obg. Link to comment Share on other sites More sharing options...
saunde Posted November 25, 2007 at 07:25 PM Report Share #150308 Posted November 25, 2007 at 07:25 PM Isto significa que o malloc não retorna um pointer mas um pointer para pointer. Para explicar melhor isto dá uma vista de olhos neste artigo ficas a perceber os pointers e as referências. http://www.codeproject.com/cpp/PtrToPtr.asp Um blog :Sem Cafeína Link to comment Share on other sites More sharing options...
P_E_D_R_O Posted November 26, 2007 at 01:28 PM Author Report Share #150425 Posted November 26, 2007 at 01:28 PM Obg pela ajuda 😛 Link to comment Share on other sites More sharing options...
TheDark Posted November 26, 2007 at 06:09 PM Report Share #150469 Posted November 26, 2007 at 06:09 PM O malloc retorna sempre um apontador para void. O que o (int **) aí faz é um cast do resultado da chamada ao malloc (que é um void*) para apontador para apontador para int. Desaparecido. Link to comment Share on other sites More sharing options...
maeDaSol Posted December 3, 2007 at 11:52 AM Report Share #151916 Posted December 3, 2007 at 11:52 AM olá tenho um exemplo de aplicação disso criar uma matriz quadrada de tamanho n dado pelo utilizador: int **reservar(int tam_matriz){ int **m,i; /* v = ponteiro para a matriz (de ponteiros para inteiro)*/ m = calloc (tam_matriz, sizeof(int *)); /* cria espaco para cada linha da matriz que e' um vector de ponteiros para int */ for ( i = 0; i < tam_matriz; i++ ) m[i] = calloc (tam_matriz, sizeof(int)); /* cada coluna e' um vector de inteiros */ return (m); /* devolve um ponteiro para matriz[0][0] */ espero q possa ajudar com este exemplo. 😁 Link to comment Share on other sites More sharing options...
P_E_D_R_O Posted December 3, 2007 at 07:01 PM Author Report Share #152031 Posted December 3, 2007 at 07:01 PM Ajudou qq coisa... 🙂 Eu passo a explicar, estou a fazer um programa em linux ? que faça precisamente isso, ou seja,multiplicação de matrizes de dimensão n. A única coisa k não percebi ao olhar para outros códigos, foi a razão de utilizar ponteiros de ponteiros. Tipo, o pk de utilizar, por exemplo, int **reserva_mem (...) { ... } Não se podia utilizar apenas int reserva_mem (...) { ... } É k se não estou em erro penso k isso iria dar ao mesmo, ou seja, sem ponteiros de ponteiros. Ou não??? Link to comment Share on other sites More sharing options...
Warrior Posted December 3, 2007 at 08:15 PM Report Share #152068 Posted December 3, 2007 at 08:15 PM Não, porque tu não pretendes devolver um int, mas sim um apontador para um apontador de ints (ou seja, para um vector de vectores, uma matriz) Link to comment Share on other sites More sharing options...
xbrunox Posted December 3, 2007 at 09:14 PM Report Share #152085 Posted December 3, 2007 at 09:14 PM Alem de que, se tu alocares memória dentro de uma função, essa alocação só vai existir dentro do contexto da função. Porque ao saires da função toda a memória reservada vai ser limpa. Persistência, persistência, persistência!!linuxfreechoice - Blog com dicas úteis. Link to comment Share on other sites More sharing options...
Rui Carlos Posted December 3, 2007 at 09:38 PM Report Share #152097 Posted December 3, 2007 at 09:38 PM Alem de que, se tu alocares memória dentro de uma função, essa alocação só vai existir dentro do contexto da função. Porque ao saires da função toda a memória reservada vai ser limpa. Só se usares o alloca, caso contrário a memória é alocada na heap e fica disponível até fazeres free da mesma. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
P_E_D_R_O Posted December 4, 2007 at 06:03 PM Author Report Share #152276 Posted December 4, 2007 at 06:03 PM Não, porque tu não pretendes devolver um int, mas sim um apontador para um apontador de ints (ou seja, para um vector de vectores, uma matriz) Desculpem mas continuo sem perceber.... Qual é a vantagem de criar uma função que nos devolve um apontador para um apontador? É isto que não estou a perceber. Tipo, quando se cria uma matriz, o pk de se lá colocarem ponteiros para ponteiros que por sua vez apontam para valores e não os valores directamente? ? Abç Link to comment Share on other sites More sharing options...
Triton Posted December 4, 2007 at 06:24 PM Report Share #152284 Posted December 4, 2007 at 06:24 PM Qual é a vantagem de criar uma função que nos devolve um apontador para um apontador? É isto que não estou a perceber. Tipo, quando se cria uma matriz, o porque de se lá colocarem ponteiros para ponteiros que por sua vez apontam para valores e não os valores directamente? ? Porque em C tens de passar as estruturas de dados por referência, e não por valor. <3 life Link to comment Share on other sites More sharing options...
Warrior Posted December 4, 2007 at 08:57 PM Report Share #152333 Posted December 4, 2007 at 08:57 PM Repara uma coisa, tu na matriz colocas os inteiros. Contudo, a matriz em si, é só um apontador para um apontador de inteiros. m = apontador para apontador de int m[k] = apontador de int m[k][y] = int Link to comment Share on other sites More sharing options...
P_E_D_R_O Posted December 4, 2007 at 10:02 PM Author Report Share #152348 Posted December 4, 2007 at 10:02 PM Sendo assim, e aproveitando o código que foi dado em cima int **reservar(int tam_matriz){ int **m,i; /* v = ponteiro para a matriz (de ponteiros para inteiro)*/ m = calloc (tam_matriz, sizeof(int *)); /* cria espaco para cada linha da matriz que e' um vector de ponteiros para int */ for ( i = 0; i < tam_matriz; i++ ) m[i] = calloc (tam_matriz, sizeof(int)); /* cada coluna e' um vector de inteiros */ return (m); este m=calloc.... significa que está a reservar memória para uma matriz m[ i][j] certo? 😉 Link to comment Share on other sites More sharing options...
Warrior Posted December 4, 2007 at 10:21 PM Report Share #152353 Posted December 4, 2007 at 10:21 PM Para um vector m[j] de apontadores para inteiros, sim. Link to comment Share on other sites More sharing options...
P_E_D_R_O Posted December 6, 2007 at 02:48 PM Author Report Share #152651 Posted December 6, 2007 at 02:48 PM Obg 👍 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now