C语言的正确定义和赋值

float b[3][5],p[3];
p[0]=b[0];
p[2]=b+4;
以上为什么是正确的定义和赋值语句,因为
的优先级比+高,所以
b+4不应该是一个值吗?而p中不应该存放地址吗?所以为什么正确呢?

编译器不报错,不代表可以正确运行