Atribuir o endereço de uma string ao char[] não seria simplesmente fazer esse array apontar pro "local" em que ela já se encontra? Não entendi porque uma cópia da string inteira seria gerada em outro local da memória.
Essa lógica que você está pensando funcionaria se o vetor fosse um ponteiro. O ponteiro guarda um endereço e poderíamos alterar esse endereço de forma que o ponteiro guardasse o endereço da string que já está na memória. Acontece que o nome de um vetor é apenas um rótulo associado a um endereço. Esse rótulo não ocupa espaço na memória, ele não é uma variável que pode ser alterada. Ele é gerenciado pelo compilador. Sendo assim não podemos definir para que endereço este rótulo "aponta". A associação é feita na criação do vetor e não pode ser alterada. Sendo assim, fazer animal = "Tigre" é como querer colocar um endereço em um local que não existe. Ou querer fazer o rótulo animal ser associado ao endereço de Tigre. Nenhuma dessas duas coisas é possível, porque animal não guarda um endereço, ele é um rótulo associado a um endereço. É uma diferença sutil, mas importante. Acho que ficaria mais claro se eu conseguisse desenhar a diferença entre ponteiro e vetor pra você ver. Faço isso em aulas mais diante, quando falo sobre funções com vetores e strings.
@@JudSan Perfeita explicação. Finalmente entendi porque muitos enfatizam que vetores não são ponteiros. Aguardo pela sua ilustração nas próximas aulas.
Esse vídeo já está no meu planejamento. Só falta tempo para gravar :/ Mas será o primeiro vídeo inédito do canal assim que eu conseguir voltar a gravar.
Ótimo trabalho Judson.
Valeu Paulo !
Atribuir o endereço de uma string ao char[] não seria simplesmente fazer esse array apontar pro "local" em que ela já se encontra? Não entendi porque uma cópia da string inteira seria gerada em outro local da memória.
Essa lógica que você está pensando funcionaria se o vetor fosse um ponteiro. O ponteiro guarda um endereço e poderíamos alterar esse endereço de forma que o ponteiro guardasse o endereço da string que já está na memória. Acontece que o nome de um vetor é apenas um rótulo associado a um endereço. Esse rótulo não ocupa espaço na memória, ele não é uma variável que pode ser alterada. Ele é gerenciado pelo compilador. Sendo assim não podemos definir para que endereço este rótulo "aponta". A associação é feita na criação do vetor e não pode ser alterada. Sendo assim, fazer animal = "Tigre" é como querer colocar um endereço em um local que não existe. Ou querer fazer o rótulo animal ser associado ao endereço de Tigre. Nenhuma dessas duas coisas é possível, porque animal não guarda um endereço, ele é um rótulo associado a um endereço. É uma diferença sutil, mas importante. Acho que ficaria mais claro se eu conseguisse desenhar a diferença entre ponteiro e vetor pra você ver. Faço isso em aulas mais diante, quando falo sobre funções com vetores e strings.
@@JudSan Perfeita explicação. Finalmente entendi porque muitos enfatizam que vetores não são ponteiros. Aguardo pela sua ilustração nas próximas aulas.
Traz um vídeo sobre como organizar bem um projeto em C++ com vários arquivos 😅
Esse vídeo já está no meu planejamento. Só falta tempo para gravar :/ Mas será o primeiro vídeo inédito do canal assim que eu conseguir voltar a gravar.
@@JudSan vai ajudar muito quando sair, vlw