关于c语言for循环的问题

问题如图,按我的理解,循环条件中有p,那么空的p是无法进入循环体的,那这里为什么会报p为空的错误呢。
求解惑

img

for两个;;之间可以为空也可以为表达式,你第一个为空,第二个逗号表达式
即:( p , j < i),最终判断的是这个逗号表达式的值,这个表达式的值等价为j < i,
所以你的p不管是不是NULL都能进入,你可以这样写 p!=NULL && j<i