char e char * (ponteiro)

Eu gostaria de entender como os ponteiros funcionam, então eu criei este pequeno programa. Primeiro de tudo eu crio um ponteiro p, que aponta para um char.

A primeira questão é neste momento. Se eu criar um ponteiro, o valor dele é um memoryaddress (se eu apontá-lo para um objeto não ponteiro), mas desta vez é "haha" no meu exemplo. Por que isso funciona dessa maneira em char *? E como eu posso agregar valor a ele com cin >> p?

Minha segunda pergunta é que, eu criei um q char, que tem o valor do ponteiro * p no ponto em que o criei. MAS seu valor e endereço são "h" também, mas por quê? Deve ser o endereço de memória deste objeto char! É inútil: D (mingw - gcc)

#include <iostream>

int main() 
{
 /* char *p;
    cin >> p;                      //forexample: haha */

    char * p = "haha";
    char q = *p;
    std::cout << "&q = " << &q << std::endl;   //&q = h
    std::cout << "q  = " <<  q << std::endl;   //q = h

    return 0;
}

MAIS: Se eu alocar memória primeiro com char a [100]; char * p = a; então & q = h »ŢĹ, então" h "e alguma bagunça. mas deve ser um endereço de memória! e minha pergunta é, por que não é endereço então?

questionAnswers(5)

yourAnswerToTheQuestion