c语言中不同函数能不能使用相同名字的变量

  介绍

这篇文章将为大家详细讲解有关c语言中不同函数能不能使用相同名字的变量,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

可以使用c语言在函数中说明的变量为局部变量,只在函数内起作用,不会影响到其他函数。在不同函数中使用相同的变量名不代表是同一变量。

<强>在不同函数中可以使用相同名字的变量。

教程

<强>在函数内部定义的变量(局部变量)

在函数内部定义的变量,它的作用域也仅限于函数内部,出了函数就不能使用了,我们将这样的变量称为局部变量(局部变量)。函数的形参也是局部变量,也只能在函数内部使用。

int  f1 (int ) {   ,,,int  b, c,,,//a, b, c仅在函数f1()内有效   ,,,return  a + b + c;   }   int  main () {   ,,,int  m, n,,,//m, n仅在函数()内主要有效   ,,,return  0;   }

几点说明:

1)在主要函数中定义的变量也是局部变量,只能在主要函数中使用;同时,主函数中也不能使用其它函数中定义的变量.main函数也是一个函数,与其它函数地位平等。

2)形参变量,在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。

3)可以在不同的函数中使用相同的变量名,它们表示不同的数据,分配不同的内存,互不干扰,也不会发生混淆。

4)在语句块中也可定义变量,它的作用域只限于当前语句块。

<强>关于变量的命名

每一段可运行C的语言代码都包含了多个作用域,即使最简单的C语言代码也是如此。

int 主要(){   ,,,return  0;   }

这就是最简单的,可运行C的语言代码,它包含了两个作用域,一个是主要()函数内部的局部作用域,一个是主要()函数外部的全局作用域。

C语言规定,在同一个作用域中不能出现两个名字相同的变量,否则会产生命名冲突;但是在不同的作用域中,允许出现名字相同的变量,它们的作用范围不同,彼此之间不会产生冲突。这句话有两层含义:

<李>

不同函数内部可以出现同名的变量,不同函数是不同的局部作用域;

<李>

函数内部和外部可以出现同名的变量,函数内部是局部作用域,函数外部是全局作用域。

1)不同函数内部的同名变量是两个完全独立的变量,它们之间没有任何关联,也不会相互影响。

# include  & lt; stdio.h>      void  func_a () {   ,,,int  n =, 100;   ,,,printf (“func_a: n =, % d \ n",, n);   ,,,n =, 86;   ,,,printf (“func_a: n =, % d \ n",, n);   }      void  func_b () {   ,,,int  n =, 29日;   ,,,printf (“func_b: n =, % d \ n",, n);   ,,,func_a();,//调用func_a ()   ,,,printf (“func_b: n =, % d \ n",, n);   }      int  main () {   ,,,func_b ();   ,,,return  0;   }

运行结果:

func_b: n =, 29岁   func_a: n =, 100   func_a: n =, 86   func_b: n =,

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

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

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

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

# include  & lt; 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;   }

c语言中不同函数能不能使用相同名字的变量