前言

函数中使用参数是否会改变主调函数中的变量?全局变量在函数如何改变?
示例

函数中的全局变量

1
2
3
4
5
6
7
8
int x = 1;
int function()
{
int x;
x = 2;
printf("%d, x);   //x = 2;
}
printf("%d", x);      //x = 1;

在块中,重新定义了局部变量x,(因为同名)所以全局变量暂时被覆盖。当跳出块时x变为全局变量。


1
2
3
4
5
6
7
int x = 1;
int function()
{
x = 2;
printf("%d, x); //x = 2;
}
printf("%d", x); // x = 2;

因为全局变量随处可用,所以可在块中修改x的值。


所以全局变量很容易被修改,一般将固定值设为全局变量,使用const修饰。

函数中的参数。

一般由主调程序将变量传给函数。

  • 例如函数
1
2
3
4
int function(const int arr[], int x, int n)
{

}
  1. 此时函数中的int x, int n已经是原始数据的备份,所以无在函数中如何修改,都无法改变主调函数中相应的值。
  2. const int arr[]则是一个数组指针。const 的作用是防止修改数组中的值(能修改地址)。如果不加const,就可以在函数中修改它的值(也能修改地址)