Você já se perguntou por que não usamos o operador & ao ler uma string com a função scanf?
Para entender isso, a primeira coisa que precisa estar claro é: a função scanf receber o endereço de memória onde deve salvar o que foi lido!
Como já vimos, uma string é um vetor de caracteres e, como já foi dito, um vetor, independente do tipo, fica organizado na memória de forma sequencial, ou seja, uma posição após a outra.
A novidade agora é que apenas o nome do nosso vetor já é um ponteiro para o início do vetor, ou seja, já é um ponteiro para a primeira posição de memória do vetor. Como um vetor fica armazenado na memória de forma sequencia, sabendo qual é a primeira posição, podemos acessar todas as demais.
Para confirmar esta informação, observe o código a seguir. Seja um vetor chamado palavra. Ao imprimir, usando %p (para imprimir um endereço de memória), apenas o conteúdo de palavra, ou &palavra ou ainda &palavra[0] teremos exatamente o mesmo endereço de memória, pois são três formas diferentes de acessar a primeira posição do vetor palavra.
*/ Aula 186: Por que năo usamos o & ao ler uma string com a funçăo scanf? Código escrito por Wagner Gaspar Maior de 2021 */ int main(){ char palavra[100]; scanf("%100[^\n]", palavra); printf("%s\n", palavra); printf("%p\n", palavra); printf("%p\n", &palavra); printf("%p\n", &palavra[0]); return 0; }