int x, y, z, w;
void p(int *y, int x)
{
static int w;
*y++; x++; w = x+*--y;
printf("%d# %d# %d# %d#",x,*y,z,w);
}
int main(void)
{
int x, y, z, w;
x=y=z=w=1;
do{
static int x;
p(&x, y);
printf("%d# %d# %d# %d#",x,y,z,w);
} while(0);
return 0;
}
1、同名变量所在范围越小,使用优先级越高。
2、++ 和 -- 在变量前边会先对变量进行自增或自减,然后再取变量的值。++ 和 -- 在变量后边会先取变量的值,然后再对变量进行自增或自减。
具体的数值传递和赋值请参考:
// 0 0 0 0
int x, y, z, w;
//
void p(int *y, int x)
{ // 0
static int w;
// *y:形参,do函数定义的x初始为0,*y++变为1 x:形参,main函数定义的y初始为1,x++变为2 w:p函数定义初始为0,经过计算 w = 2 + --1 = 2 + 0 = 2
*y++; x++; w = x+*--y;
// x:形参,经过计算变为2 *y:形参,经过计算变为0 z:全局变量0 w:p函数定义计算后为2
printf("%d# %d# %d# %d#",x,*y,z,w);
}
int main(void)
{
// 0 0 0 0
int x, y, z, w;
//1 1 1 1 main函数中定义的4个变量值
x=y=z=w=1;
do{
// 0
static int x;
//do定义的x初始为0 y是main函数定义的 y=1
p(&x, y);
// x:do定义经过p函数计算为0 y:main函数定义为1 z:main函数定义为1 w:main函数定义为1
printf("%d# %d# %d# %d#",x,y,z,w);
} while(0);
return 0;
}
p中输出,x,y是形参,w是静态的,z是全局
main中定义了x,y,z,w,后面使用的变量都不是全局的了。do中给p传的是静态变量x