微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C语言变量的作用域

目录

一、局部变量 

示例 

运行效果

二、全局变量

 示例

运行效果

注意事项

运行效果

三、形式参数

举个栗子

运行效果

全局变量与局部变量在内存中的区别

四、初始化局部变量和全局变量


作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量:

  1. 函数或块内部的局部变量
  2. 在所有函数外部的全局变量
  3. 形式参数的函数参数定义中

一、局部变量 

  1. 在某个函数或语句块的内部声明的变量称为局部变量,它们只能在该函数或语句块内部的语句使用
  2. 局部变量在函数或语句块外部是不可用的
  3. 局部变量在函数返回或语句块结束时由系统收回内存空间

示例 

test39.c

#include <stdio.h>

int main ()
{
  // 局部变量声明
  int a, b, c;

  // 初始化 
  a = 3;
  b = 5;
  c = a + b;

  printf ("a = %d, b = %d and c = %d\n", a, b, c);

  return 0;
}

运行效果

二、全局变量

  1. 全局变量是定义在函数外部,通常是在程序的顶部(其它地方也可以)。全局变量在整个程序生命周期内都是有效的,在定义位置之后的任意函数中都能访问
  2. 全局变量在主程序退出时由系统收回内存空间

 示例

test40.c

#include <stdio.h>

// 全局变量声明
int g;

int main ()
{
  // 局部变量声明
  int a, b;

  // 初始化
  a = 3;
  b = 5;
  g = a + b;

  printf ("a = %d, b = %d and g = %d\n", a, b, g);

  return 0;
}

运行效果

注意事项

局部变量和全局变量名称可以相同,在某函数或语句块内部,如果局部变量名与全局变量名相同,就会屏蔽全局变量而使用局部变量

test41.c 

#include <stdio.h>

double d=3.14; // 全局变量声明

void func1(); // 声明一个自定义函数

int main()
{
  printf("位置一 d=%lf\n",d);
  func1();
  printf("位置二 d=%lf\n",d);
}

void func1()
{
  double d=3.1415; // 局部变量的声明
  printf("位置三 d=%lf\n",d);
}

在 test41.c 中,定义了全局变量 d,在func1()函数中,定义了局部变量 d,func1()函数运行的时候,会使用自己的局部变量d,不会使用全局变量d,所以main函数中位置二输出d的值是3.14

运行效果

再举一个简单的栗子 test42.c

#include <stdio.h>

// 全局变量声明 
int g = 3;

int main ()
{
  // 局部变量声明 
  int g = 5;

  //局部变量名与全局变量名相同,就会屏蔽全局变量而使用局部变量
  printf ("g = %d\n",  g);// g 等于 5

  return 0;
}

三、形式参数

函数的参数,形式参数,被当作该函数内的局部变量,如果与全局变量同名它们会优先使用

举个栗子

test43.c

#include <stdio.h>

// 全局变量声明
int a = 3;

int main ()
{ 
  // 在主函数中的局部变量声明
  int a = 5;
  int b = 8;
  int c = 0;
  int sum(int, int); //函数的声明
  
  printf ("a = %d\n",  a);
  c = sum( a, b);
  printf ("c = %d\n",  c);
  
  return 0;
}

// 函数的定义
int sum(int a, int b)
{
    printf ("a = %d\n",  a);
    printf ("b = %d\n",  b);

    return a + b;
}

运行效果

全局变量与局部变量在内存中的区别

  • 全局变量保存在内存的全局存储区中,占用静态的存储单元
  • 局部变量保存在中,只有在所在函数调用动态地为变量分配存储单元

四、初始化局部变量和全局变量

  1. 局部变量被定义时,系统不会对其初始化,您必须自行对其初始化
  2. 定义全局变量时,系统会自动对其初始化,如下所示:
数据类型 初始化认值
int(整形) 0
char(字符型) '\0'
float(单精度浮点型) 0
double(双精度浮点型) 0
pointer (指针)下期介绍 NULL

本期的内容到这里就结束了,下期再见!

原文地址:https://www.jb51.cc/wenti/3281443.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐