一个关于c指针的很基础的东西!求大神解释上,不胜感激

一个关于c指针的很基础的东西!求大神解释下,不胜感激!
#include <stdio.h>
#include <stdlib.h>

int main()
{
char * p = (char *)malloc(5);//这行明白!
p = "12345";
printf("%d\n", *(p + 2));

return 0;
}

//输出结果为51
//我不明白为什么?

------解决方案--------------------
*(p+2)为'3' 对应的ASCII码为51 所以输出51