mirror of
https://gitlab.com/blau_araujo/cblc.git
synced 2025-06-05 19:26:36 -03:00
Diferença de vetores e ponteiros #16
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Blau, veja que interessante sobre as particularidades entre vetores e ponteiros.
Sabemos que ponteiros são armazenados em .rodata e por isso não conseguimos modificar seu conteúdo por índices
Porém, é possível reatribuir a cadeia de string inteira, da forma
O que acontece no segundo exemplo?
Esse endereço do ponteiro é modificado em tempo de execução?
Pq o espaço alocado na compilação foi do tamanho de "banana" do início.
Já vi que o endereço de ptr não muda
@NRZCode wrote in #16 (comment):
O endereço de outra string é atribuído ao ponteiro.
O endereço do ponteiro, não, só o endereço no ponteiro. ;-)
Não foi alocado espaço... O ponteiro recebeu o endereço da string "banana" e depois o endereço da string "abacate", ambas do tipo
char *
.@NRZCode, na minha opinião, o segundo código, são coisas diferentes, apesar de *ponteiro ser uma variável:
*str = "banana"; // ponteiro, deveria apontar para um endereço, e está atribuindo uma string
str = "abacate"; // nome de uma variável, aqui uma variável declarada chamada str.
Então ao meu ver, não mudou nada em tempo de execução, apenas atribuiu um valor a uma variável de nome "str", com valor "abacate", e fazendo uma verificação do binário, com o comando:
Saída do comando:
A 'str = "abacate"', também está na área read only.
E ai Blau, o que você nos diz?
@blau_araujo wrote in #16 (comment):
Perfeito, Blau.
Agora me recordo de outro exemplo que vi, onde era declarado um vetor de char e seu endereço era atribuído a um ponteiro.
Assim toda manipulação dos caracteres era possível.
Eu ainda estou confundindo a impressão do endereço de ponteiro e vetor usando o & a frente da variável.
@drginfo wrote in #16 (comment):
Mudou em tempo de execução.
Mudou o endereço que no começo da execução aponta pro endereço de banana e após aponta pro endereço de abacate.
Ambas strings estão armazenadas em rodata.
Então o que muda não é a atribuição da string à ptr e sim o endereço.
@drginfo wrote in #16 (comment):
Não...
str
é apenas o ponteiro sendo usado para receber outro endereço, não há uma segunda variável.@NRZCode wrote in #16 (comment):
A sintaxe
&str
refere-se ao endereço na pilha onde o endereço emstr
será escrito.Do mesmo modo isso:
A sintaxe
a
avalia o valor associado à variável, enquanto&a
refere-se ao endereço na pilha onde o valor será escrito.