函数的值传递不是单项的吗?为啥第四个输出的q值是5

#include<stdio.h>
int m=3,p=1,q=8;
void sub(int x,int y)
{
int p=7;
printf("%d,%d,%d\n",m,p,q);
m=x+y; p=x/y;
q=m+p;
printf("%d,%d,%d\n",m,p,q);
}
int main()
{
int m=2;
printf("%d,%d,%d\n",m,p,q);
sub(m,p);
printf("%d,%d,%d\n",m,p,q);
return 0;
}