char y char * (puntero)

Me gustaría entender cómo funcionan los punteros, así que creé este pequeño programa. En primer lugar, creo un puntero p, que apunta a un carácter.

La primera pregunta es en este punto. Si creo un puntero, su valor es una dirección de memoria (si lo apunto a un objeto que no es puntero), pero esta vez es "jaja" en mi ejemplo. ¿Por qué funciona de esta manera en char *? ¿Y cómo puedo agregarle valor con cin >> p?

Mi segunda pregunta es que creé un carácter q, que tiene el valor del puntero * p en el punto en que lo creé. PERO su valor y dirección son "h" también, pero ¿por qué? ¡Debe ser la dirección de memoria de este objeto char! No tiene sentido: 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;
}

MÁS: si asigno memoria primero con char a [100]; char * p = a; entonces & q = h »ŢĹ, así que" h "y algo de desorden. ¡Pero debería ser una dirección de memoria! y mi pregunta es, ¿por qué no se trata entonces?

Respuestas a la pregunta(5)

Su respuesta a la pregunta