在不同函数中可以使用相同名字的变量吗


当前第2页 返回上一页

1

2

3

4

func_b: n = 29

func_a: n = 100

func_a: n = 86

func_b: n = 29

func_a() 和 func_b() 内部都定义了一个变量 n,在 func_b() 中,n 的初始值是 29,调用 func_a() 后,n 值还是 29,这说明 func_b() 内部的 n 并没有影响 func_a() 内部的 n。这两个 n 是完全不同的变量,彼此之间根本“不认识”,只是起了个相同的名字而已,这就好像明星撞衫,北京和云南都有叫李红的,赶巧了而已。

2) 函数内部的局部变量和函数外部的全局变量同名时,在当前函数这个局部作用域中,全局变量会被“屏蔽”,不再起作用。也就是说,在函数内部使用的是局部变量,而不是全局变量。

变量的使用遵循就近原则,如果在当前的局部作用域中找到了同名变量,就不会再去更大的全局作用域中查找。另外,只能从小的作用域向大的作用域中去寻找变量,而不能反过来,使用更小的作用域中的变量。

下面我们通过一个具体的例子来说明:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#include <stdio.h>

 

int n = 10;  //全局变量

 

void func1(){

    int n = 20;  //局部变量

    printf("func1 n: %d\n", n);

}

 

void func2(int n){

    printf("func2 n: %d\n", n);

}

 

void func3(){

    printf("func3 n: %d\n", n);

}

 

int main(){

    int n = 30;  //局部变量

    func1();

    func2(n);

    func3();

    printf("main n: %d\n", n);

    

    return 0;

}

运行结果:

1

2

3

4

func1 n: 20

func2 n: 30

func3 n: 10

main n: 30

代码中虽然定义了多个同名变量 n,但它们的作用域不同,所有不会产生命名冲突。

下面是对输出结果的分析:

对于 func1(),输出结果为 20,显然使用的是 func1() 内部的 n,而不是外部的 n。

调用 func2() 时,会把 main() 中的实参 n 传递给 func2() 中的形参 n,此时形参 n 的值变为 30。形参 n 也是局部变量,所以就使用它了。

func3() 输出 10,使用的是全局变量,因为在 func3() 中不存在局部变量 n,所以编译器只能到函数外部,也就是全局作用域中去寻找变量 n。

main() 中 printf() 语句输出 30,说明使用的是 main() 中的 n,而不是外部的 n。

更多编程相关知识,请访问:编程教学!!

以上就是在不同函数中可以使用相同名字的变量吗的详细内容!

返回前面的内容

相关阅读 >>

C语言if语句用法是什么

用户标识符合法的条件是什么

&&在C语言中是什么意思?

C语言中数据结构是什么?常见数据结构有哪些?

C语言编写爱心的代码是什么

C语言】递归和非递归分别实现strlen

C语言char是什么意思

C语言中定义结构体的保留字是什么?

C语言怎么输入十个数输出最大值

getch()的功能是什么

更多相关阅读请进入《C语言》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...