位置:首页 > 高级语言 > C语言在线教程 > C语言范围规则

C语言范围规则

任何编程范围在程序里,一个定义的变量可以有它的存在范围,并超出区域该变量不能访问。在C语言编程中有三个地方变量可以声明:

  1. 内部函数或这就是所谓的局部变量块

  2. 所有函数外部的变量被称为全局变量。

  3. 函数参数的定义被称为形式参数。

让我们来解释一下什么是局部和全局变量和形式参数。

局部变量

这是一个函数或块内声明的变量称为局部变量。它们只能由属于该函数或代码块内部的语句中使用。局部变量是不知道自己在外函数。下面是使用局部变量的例子。这里所有的变量a,b和c是main()函数的局部变量。

#include <stdio.h>
 
int main ()
{
  /* local variable declaration */
  int a, b;
  int c;
 
  /* actual initialization */
  a = 10;
  b = 20;
  c = a + b;
 
  printf ("value of a = %d, b = %d and c = %d
", a, b, c);
 
  return 0;
}

全局变量

全局变量函数的定义之外,通常在程序的顶部。全局变量将持有自己的值在整个项目的生命周期,它们可以在里面任意的程序中定义的函数访问。

全局变量可以被任何函数访问。也就是说,全局变量可以在整个程序中使用在它的声明之后。下面是使用全局和局部变量的例子:

#include <stdio.h>
 
/* global variable declaration */
int g;
 
int main ()
{
  /* local variable declaration */
  int a, b;
 
  /* actual initialization */
  a = 10;
  b = 20;
  g = a + b;
 
  printf ("value of a = %d, b = %d and g = %d
", a, b, g);
 
  return 0;
}

一个程序可以有相同的名称为局部和全局变量,但局部变量的值在函数内部将优先。下面是一个例子:

#include <stdio.h>
 
/* global variable declaration */
int g = 20;
 
int main ()
{
  /* local variable declaration */
  int g = 10;
 
  printf ("value of g = %d
",  g);
 
  return 0;
}

当上述代码被编译和执行时,它产生了以下结果:

value of g = 10

形式参数

函数参数,形式参数,被当作使用-局部变量函数,它们优先于全局变量。下面是一个例子:

#include <stdio.h>
 
/* global variable declaration */
int a = 20;
 
int main ()
{
  /* local variable declaration in main function */
  int a = 10;
  int b = 20;
  int c = 0;

  printf ("value of a in main() = %d
",  a);
  c = sum( a, b);
  printf ("value of c in main() = %d
",  c);

  return 0;
}

/* function to add two integers */
int sum(int a, int b)
{
    printf ("value of a in sum() = %d
",  a);
    printf ("value of b in sum() = %d
",  b);

    return a + b;
}

当上述代码被编译和执行时,它产生了以下结果:

value of a in main() = 10
value of a in sum() = 10
value of b in sum() = 20
value of c in main() = 30

初始化局部和全局变量

当局部变量被定义,它不是由系统初始化,用户必须自己初始化。全局变量是由系统自动初始化,它们定义为如下:

数据类型 最初的默认值
int 0
char '\0'
float 0
double 0
yiibaier NULL

这是一个良好的编程习惯初始化变量正确的变量值,否则程序可能会产生意想不到的结果,因为未初始化的变量将已经可以在它的内存位置的一些垃圾值。