Quando queremos armazenar vários valores de um mesmo tipo em sequência podemos usar vetores ou ponteiros. Em essência, os dois são a mesma coisa, pois vetores também são ponteiros. Porém, vetores são ponteiros CONSTANTES e como tal possui algumas limitações, como, por exemplo, não deixar de apontar pra área que apontam pra apontar pra outras áreas.
Sendo assim, às vezes eu opto por usar ponteiros em vez de vetores, pois há momentos em que eu preciso fazer os ponteiros apontar pra outras áreas. Pra que eu possa ter essa flexibilidade no meu código, eu substituo vetores por ponteiros da seguinte forma:
Cada um desses ponteiros apontam pra áreas de memória com 5 elementos. Eles funcionam exatamente da mesma maneira que os vetores, mas com o diferencial de ser possível mudar os endereços apontados.
A mesma construção mostrada anteriormente pode ser feita usando inicializações também. Porém, nesse caso é necessário incluir mais um cast pra que o compilador não acuse erros de compilação:
int *a= (int *) (int [5]) {1, 2, 3, 4, 5};
int *b= (int *) (int [5]) {11, 12};
int *c= (int *) (int []) {21, 22, 23, 24, 25};
A minha dúvida está relacionada com as áreas de memória para qual os ponteiros apontam.
Depois que essas operações são feitas, as áreas de memória são desalocadas? Ou seja, nos exemplos, os ponteiros estão apontando pra áreas de memória desalocadas?
Caso estejam apontando pra áreas devidamente alocadas, essas áreas são desalocadas quando os ponteiros passam a apontar pra outros endereços?
Exemplo:
int *a= (int *) (int [5]) {1, 2, 3, 4, 5};
int b= 123;
a= &b;
Eu testei isso aqui em casa algumas vezes e nunca deu nenhum erro. Porém, eu não sei se não deu erro porque é uma construção válida da linguagem ou porque a linguagem é excessivamente permissiva, principalmente quando se trata de vetores.
Pergunta
Ricardo Martins
Quando queremos armazenar vários valores de um mesmo tipo em sequência podemos usar vetores ou ponteiros. Em essência, os dois são a mesma coisa, pois vetores também são ponteiros. Porém, vetores são ponteiros CONSTANTES e como tal possui algumas limitações, como, por exemplo, não deixar de apontar pra área que apontam pra apontar pra outras áreas.
Sendo assim, às vezes eu opto por usar ponteiros em vez de vetores, pois há momentos em que eu preciso fazer os ponteiros apontar pra outras áreas. Pra que eu possa ter essa flexibilidade no meu código, eu substituo vetores por ponteiros da seguinte forma:
Cada um desses ponteiros apontam pra áreas de memória com 5 elementos. Eles funcionam exatamente da mesma maneira que os vetores, mas com o diferencial de ser possível mudar os endereços apontados. A mesma construção mostrada anteriormente pode ser feita usando inicializações também. Porém, nesse caso é necessário incluir mais um cast pra que o compilador não acuse erros de compilação: A minha dúvida está relacionada com as áreas de memória para qual os ponteiros apontam. Depois que essas operações são feitas, as áreas de memória são desalocadas? Ou seja, nos exemplos, os ponteiros estão apontando pra áreas de memória desalocadas? Caso estejam apontando pra áreas devidamente alocadas, essas áreas são desalocadas quando os ponteiros passam a apontar pra outros endereços? Exemplo:Eu testei isso aqui em casa algumas vezes e nunca deu nenhum erro. Porém, eu não sei se não deu erro porque é uma construção válida da linguagem ou porque a linguagem é excessivamente permissiva, principalmente quando se trata de vetores.
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.