ponteiros como usar e qual a vantagem ??

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor Fabio_Jerena » 01 Abr 2011 14:07

Cara, eu tenho uma certa noção de C (tudo que precisei fazer consegui...) então desta vez o que me pegou na falta de experiência no trato com tabelas, a forma que vc me sugeriu funcionou, porem acho deselegante não usar a linguagem na sua plenitude...
Bom, paciência, mas continuo querendo saber se é limitação do compilador CCS, se sou um nó cego.
Obrigado
Fábio Jerena
Fabio_Jerena
Nibble
 
Mensagens: 52
Registrado em: 08 Mar 2007 08:59

Mensagempor Fabio_Jerena » 01 Abr 2011 14:09

Cara, eu tenho uma certa noção de C (tudo que precisei fazer consegui...) então desta vez o que me pegou na falta de experiência no trato com tabelas, a forma que vc me sugeriu funcionou, porem acho deselegante não usar a linguagem na sua plenitude...
Bom, paciência, mas continuo querendo saber se é limitação do compilador CCS, se sou um nó cego.
Obrigado
Fábio Jerena
Fabio_Jerena
Nibble
 
Mensagens: 52
Registrado em: 08 Mar 2007 08:59

Mensagempor luisf.rossi » 04 Abr 2011 18:00

Fabio_Jerena escreveu:Então cara, mas olha só que bizarro...
Ok, resolvo o problema, já que entendemos como que o compilador está se comportando para essa minha sintaxe, mas e aí, é assim mesmo? Pelo que eu entendi não é isso que o C prevê!
Ficou chateado de ser algo tão simples e não funcionar de jeito nenhum, como alguem que está aprendendo fica nessas horas? O livro não é preciso, o compilador não funciona, eu não estou sabendo escrever o código???
Fora que pensando em otimização, prá quê fazer mais contas se o compilador deveria me entregar essa informação através de index que eu forneço?
Isso que eu não consigo entender e queria o veredito de quem trabalha com o CCS e saber se é uma limitação dele, se estou abordando o problema incorretamente, costumo ter bastante problema (principalmente na depuração dos meus códigos), mas até o presente momento só erros meus, não achei nenhum problema no CCS...
Agradeço a ajuda!


O compilador esta certo.. leia o que o o chip select falou... em C "matrizes" nada mais são do que arrays lidos de uma forma indexada. nada mais. Quando você passa um array para uma função.. você está passando o ponteiro para o primeiro elemento do array.. ou seja &array[0] por exemplo. Desta forma.. a suafunção não sabe que ela deve interpretar essa "matriz" ja que ela não sabe como deve indexar ela.

Uma saida que existe é usar ponteiros de ponteiros .. ficaria mais ou menos assim:

Código: Selecionar todos

#include <stdlib.h>
.
.
.
.

int Funcao_Teste(int x, int y, int **Tabela)

  return Tabela[x][y];
}

int main()
{
    int nrows = 8;
    int ncolumns = 8;
    int i;
    int **TABTEST;
   TABTEST = (int**)malloc(nrows * sizeof(int *));
   if(TABTEST == NULL)
      {
                                       //lida com o erro...
      }
   for(i = 0; i < nrows; i++)
      {
      TABTEST[i] = (int*)malloc(ncolumns * sizeof(int));
      if(TABTEST[i] == NULL)
         {
                                                          //lida com o erro...
         }
      }
    array[1][1] = 10;
    //define os valores das variaveis....

    int buffer_t;
   
    buffer_t = Funcao_Teste(1,1, TABTEST);
.
.
.
.   
}



Isso pode ser feito num PIC sem problemas.. abs
luisf.rossi
Byte
 
Mensagens: 109
Registrado em: 28 Nov 2010 12:48
Localização: São Paulo, SP

Mensagempor luisf.rossi » 04 Abr 2011 18:04

Fabio_Jerena escreveu:Então cara, mas olha só que bizarro...
Ok, resolvo o problema, já que entendemos como que o compilador está se comportando para essa minha sintaxe, mas e aí, é assim mesmo? Pelo que eu entendi não é isso que o C prevê!
Ficou chateado de ser algo tão simples e não funcionar de jeito nenhum, como alguem que está aprendendo fica nessas horas? O livro não é preciso, o compilador não funciona, eu não estou sabendo escrever o código???
Fora que pensando em otimização, prá quê fazer mais contas se o compilador deveria me entregar essa informação através de index que eu forneço?
Isso que eu não consigo entender e queria o veredito de quem trabalha com o CCS e saber se é uma limitação dele, se estou abordando o problema incorretamente, costumo ter bastante problema (principalmente na depuração dos meus códigos), mas até o presente momento só erros meus, não achei nenhum problema no CCS...
Agradeço a ajuda!


O compilador esta certo.. leia o que o o chip select falou... em C "matrizes" nada mais são do que arrays lidos de uma forma indexada. nada mais. Quando você passa um array para uma função.. você está passando o ponteiro para o primeiro elemento do array.. ou seja &array[0] por exemplo. Desta forma.. a suafunção não sabe que ela deve interpretar essa "matriz" ja que ela não sabe como deve indexar ela.

Uma saida que existe é usar ponteiros de ponteiros .. ficaria mais ou menos assim:

Código: Selecionar todos

#include <stdlib.h>
.
.
.
.

int Funcao_Teste(int x, int y, int **Tabela)

  return Tabela[x][y];
}

int main()
{
    int nrows = 8;
    int ncolumns = 8;
    int i;
    int **TABTEST;
   TABTEST = (int**)malloc(nrows * sizeof(int *));
   if(TABTEST == NULL)
      {
                                       //lida com o erro...
      }
   for(i = 0; i < nrows; i++)
      {
      TABTEST[i] = (int*)malloc(ncolumns * sizeof(int));
      if(TABTEST[i] == NULL)
         {
                                                          //lida com o erro...
         }
      }
    array[1][1] = 10;
    //define os valores das variaveis....

    int buffer_t;
   
    buffer_t = Funcao_Teste(1,1, TABTEST);
.
.
.
.   
}



Isso pode ser feito num PIC sem problemas.. abs
luisf.rossi
Byte
 
Mensagens: 109
Registrado em: 28 Nov 2010 12:48
Localização: São Paulo, SP

Anterior

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x