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版的  但其实不影响理解,若是不理解,可以留言评论  博主亲自给你解答)

 

 

 

posted @ 2019-04-14 14:11  龙雪  阅读(375)  评论(0编辑  收藏  举报