A brief note on the four types of raw pointers.
int * p_int1 {};
const int * p_int2 {};
int * const p_int3 {};
const int * const p_int4 {};
To read these lines, you start from the end and read backwards.
p_int1 is a pointer to an int, the data pointed to can be changed through the pointer and the pointer itself can be reassigned to different address.
p_int2 is a pointer to an integer constant which means that the pointer can be reassigned to a different address but the data pointed to can’t be changed through the pointer,
p_int3 is a constant pointer to an integer. Using this pointer, you can change the data pointed to but not the pointer itself.
p_int4 is a const pointer to an integer constant. This means that the pointer cannot be reassigned to another address and the data pointed to also can’t be changed.