为什么答案是5 ,直接把*p看成a+5来做吗?p的首地址是a+5,那*--p意思要取在他首地址前一个的地址,但看p不是没有吗,不应该非法吗

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

main()
{char a[10]={1,2,3,4,5,6,7,8,9,10},p=a+5;
printf("%d",
--p);
}
A. 3 B. 非法 C. 5 D. a[4]的地址

p是指针,* p=a+5,a表示数组a的首地址(也就是1的位置),则p指向a的往后的第5个地址,也就是p指向6,* p表示取p指向的值,而* --p表示取p前一个的值,也就是5