求答案和解释
#include<stdio.h>
int a=3,b=5;
void f ( int a)
{ a++;b--;
printf("%d%d",a,b);}
main()
{ f(a);
printf("%d%d",a,b);
getch();
}
[解决办法]
4434
全局a在f里面没起作用
[解决办法]
作用域
[解决办法]
1 #include<stdio.h>
2 int a=3,b=5; //a全局变量
3 void f ( int a) //a形参,局部变量
4 { a++;b--; //b全局变量
5 printf("%d%d",a,b);} //a局部变量,b全局变量
6 main()
7 { f(a); //这里的a是全局变量
8 printf("%d%d",a,b);//a全部变量,b全局变量
9 getch();
10 }
输出结果
4434
7行的f(a)调用中,全局变量a的值传给了形参a,是值传递,在函数中相当于形参a被赋值为3,在函数内部如果局部变量名与全局变量名相同,局部变量要覆盖全局变量,所以函数内部操作的是局部变量a,b还是全局变量b,这样就了然了。
[解决办法]
1 #include<stdio.h>
2 int a=3,b=5; //a全局变量
3 void f ( int a) //a形参,局部变量
4 { a++;b--; //b全局变量
5 printf("%d%d",a,b);} //a局部变量,b全局变量
6 main()
7 { f(a); //这里的a是全局变量
8 printf("%d%d",a,b);//a全部变量,b全局变量
9 getch();
10 }
输出结果
4434
7行的f(a)调用中,全局变量a的值传给了形参a,是值传递,在函数中相当于形参a被赋值为3,在函数内部如果局部变量名与全局变量名相同,局部变量要覆盖全局变量,所以函数内部操作的是局部变量a,b还是全局变量b,这样就了然了。
[解决办法]
1 #include<stdio.h>
2 int a=3,b=5; //a全局变量
3 void f ( int a) //a形参,局部变量
4 { a++;b--; //b全局变量
5 printf("%d%d",a,b);} //a局部变量,b全局变量
6 main()
7 { f(a); //这里的a是全局变量
8 printf("%d%d",a,b);//a全部变量,b全局变量
9 getch();
10 }
输出结果
4434
7行的f(a)调用中,全局变量a的值传给了形参a,是值传递,在函数中相当于形参a被赋值为3,在函数内部如果局部变量名与全局变量名相同,局部变量要覆盖全局变量,所以函数内部操作的是局部变量a,b还是全局变量b,这样就了然了。
[解决办法]
首先,肯定是4434
其次,主要是理解函数参数的传递方式,主要是把参数做一次拷贝,传到子函数中的是参数的拷贝,并不会影响参数本身,即使是指针作为参数传递的也是指针的拷贝,只是通过指针可以修改它指向的内容。