关于数组强制类型转换的有关问题

关于数组强制类型转换的问题
我想通过分析字符串进行四则混合运算,如1+2*3-4
if (a[j]==42 || a[j]==47) //如果有乘除法存在,则跳过i位置,在i位置后的j位置进行乘除法运算
{
q=a[j];
printf("%d %d q j\n",q,j);
if(q==42){ //乘法运算
j1=j;
while(st[j-1]=NULL){j--;} //由于一次循环后会有NULL出现,所以判断下一个运算符两边最近的非NULL值
while(st[j1+1]=NULL){j1++;}
printf("%d %d\n",j,j1);
p=(short)(st[j-1])*(short)(st[j1+1]); //强制将运算符指针两边最近的非NULL字符转换为short类型
printf("%d %d\n",(short)st[j-1],(short)st[j1+1]);
st[j]=p;
st[j-1]=NULL;
st[j1+1]=NULL; //将刚运算过的两个单元内的内容清空
}

问题:为什么(short)st[j-1]和(short)st[j1+1]打印时都是“0”呢?

------解决方案--------------------
st[j-1]=NULL 你这里是要判断还是真的要赋值
------解决方案--------------------
楼主没有学过编译原理吧,用这种方法分析语法呢.
------解决方案--------------------
while(st[j-1]=NULL){j--;} //由于一次循环后会有NULL出现,所以判断下一个运算符两边最近的非NULL值
while(st[j1+1]=NULL){j1++;} 

=>
while(st[j-1]==NULL){j--;} //由于一次循环后会有NULL出现,所以判断下一个运算符两边最近的非NULL值
while(st[j1+1]==NULL){j1++;}