人生需要对手的例子:c语言问题

来源:百度文库 编辑:高考问答 时间:2024/05/01 02:39:38
int i j;
void change (int i)
{i=2;
j=3;
}
main()
{i=5;
j=6;
change(i);
change(j);
printf("i=%d\t j=%\n",i,j);
解释一下 谢谢
i是局部变量 j为什么就是全局变量呢 ?

又是你啊,跟刚才一样的问题。
你等等。
首先应该知道变量在不同的函数中即使用同样的字母表示也未必代表同个变量。

所以在上面这个程序中,函数change 中的i并不同于函数main和change外定义的全局变量i,j中的i。但change中的j却是全局变量中的j。为什么?因为j在函数change中没有定义,那么他就是全局变量中的j。而在main中的i和j在main中都没有定义,他们跟函数外定义的i,j是同一个变量。
应该这样说,在函数段之前定义的全局变量,在各个函数段内在是有效的。但是如果函数段内出现重复定义时,如上面程序change函数内的i,就是函数change也定义的,那么在这个函数内,i就不再代表全局变量中的i ,而代表change函数中自己定义的i。
理解了这一点,就不难理解上面程序的运行结果了。

void change (int i)
{i=2; //这个i是函数change的局部变量(是形参),而不是全局的那个i
j=3; //这个是全局的j
}
而main里面又有它自己的变量i和j
所以,运行完change以后,改变了全局的j(i没变,因为change改变的i是局部的),但是没有改变main里面的i,j(形参不改变实参)
所以
最后输入的i,j就是main里面定义的i=5 j=6

全局变量,就是在函数外部定义的变量,这里的函数包括主函数和调用函数.从定义的地方开始,它起作用.如果定义在开头,那么整个源文件都有作用,如果定义在中间,那么就从开始定义它的地方有作用.
局部变量就是在函数内部定义的变量,当然也包括主函数和调用函数了!
只在定义它的函数内部有作用.
当一个源文件中有两个变量名相同,且一个是全局变量,一个是局部变量的时候,在它们相遇的地方,全局变量将被屏蔽,也就是说局部变量起作用!
这是本人看书又用自己的话写的,不一定对啊!呵呵