C语言、C++:全局变量与局部变量
之前写过《Java:全局变量(成员变量)与局部变量》(https://blog.csdn.net/dragongiri/article/details/81947776)的文章,但由于附带了许多Java的知识,比如static关键字等对于初学者没必要的赘述,这里所以再写一篇十分简单明了的《全局变量与局部变量》(只涉及基本语言C语言)让读者快速入门与理解使用。
话不多说,直接干货 ↓
(1)全局变量
全局变量是指在定义之后的所有程序段内都有效的变量(即定义在所有函数之前〉,例如下面这个例子:
#include <stdio.h>
int x; //main函数外定义的x
void change() { //括号这里并没有定义x
x = x + 1;
}
int main(){
x = 10;
change();
printf("%d\n", x);
return 0;
}
输出结果:
11
在上述代码中 ,把x定义在所有函数的前面, 这样在 x定义之后的所有程序段都共用这个x, 所以当主函数对x赋值为10 之后, 使用change()函数可以改变x 的值, 从而令x 变为11
(2局部变量
与全局变量相对,局部变量定义在函数内部,且只在函数内部生效,函数结束时局部变量销毁, 示例如下:
#include <stdio.h>
void change(int x) {//这里我在括号里面定义了x 而不是最外的x
x = x + 1;
}
int main(){
x = 10;
change(x);
printf("%d\n", x);
return 0;
}
输出结果:
10
可以看到,当在主函数中定义了x 之后,将其作为change()函数的参数传入,并令x加1,但是最后输出时 x 却仍然是10。这是因为change函数的参数x 为局部变量 ,仅在函数内部生效, 通过change(x) 传进去的 x 其实只是传进去一个副本(就理解成另外一个世界的x就行 反正你别把它当原来x就行 只是它们的名字和所携带的值是一样的 其实已经是两个人了), 也即 change函数的参数x和main 函数里的x其实是作用于两个不同函数的不同变量(虽然 名字相同〉,取成不同的名字当然是可以的。这种传递参数的方式就叫做值传递(相当于我把我所携带的信息内容复制给你一遍 而不是我把我给你【这一类称为地址传递】),函数定义的小括号内的参数称为形式参数或形参,而把实际调用时小括号内的参数称为实际参数或实参。
因此, 如果想要让定义的变量对所有函数都有用, 最好还是使用全局变量的定义方式。
By the way(关于值传递以及地址传递可见https://blog.csdn.net/DragonGirI/article/details/81706001 虽然是Java版的 但其实不影响理解,若是不理解,可以留言评论 博主亲自给你解答)