一、局部变量
在一个函数内部定义的变量叫做局部变量,它只在本函数范围内有效。也就是说,只有在本函数内才能使用它们,在本函 数外是不能使用这些变量的。
#include<stdio.h>
//函数声明
void func1(int tmpvalue);
int main()
{
    int m,n;  //局部变量,但是只在main()函数内有效
    int k=4;   //局部变量,但是只在main()函数内有效
    return 0;
    //1、主函数main()中定义的变量m,n,k只在主函数中有效,虽然主函数调用了其他函数,但是在其他函数中依旧无法使用主函数中定义的变量
    //2、不同的函数可以使用相同的变量名,互不干扰。
    //3、形式参数,也是局部变量,比如func1中的tmpvalue,只在func1函数中有效。
    //4、有一种特殊写法,用一个大括号写一段代码,大括号括起来的这个叫复合语句,在该复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也叫程序块
    int a,b; //这里的有效范围直到函数末尾
    //....
    {
      int c; //c有效范围只在这个复合语句内,一旦离开复合语句,变量的内存就被系统释放掉了。
      c=a+b;
    }
}
//函数定义
void func1(int tmpvalue)
{
    //这里无法使用main()函数中定义的m,n,k
    int x,y;  //局部变量,但是只在func1()函数内有效
    int m,n;  //这里的和main()中的m,n完全不同,占用的内存地址也完全不同。
}
一个项目可以由一个或者多个源程序文件(project1.cpp)组成。
二、全局变量
在函数定义的变量称为全局变量(外部变量)。可以为本文件中其他函数共用。
全局变量的有效范围:从定义变量的位置开始到本源程序文件结束。
如果你在整个文件开头定义了该变量,则整个文件范围内都可以使用该全局变量。
总结:在一个函数中,既可以使用本函数中的局部变量,又可以使用有效的全局变量。
#include<stdio.h>
//函数声明
void func1(int tmpvalue);
int p=1,q=5;  //全局变量,因为在函数外部定义的
//函数定义
void func1(int tmpvalue)
{//这里无法使用main()函数中定义的m,n,kint x,y;  //局部变量,但是只在func1()函数内有效int m,n;  //这里的和main()中的m,n完全不同,占用的内存地址也完全不同。
}
char c1,c2;  //全局变量,从定义的位置,到文件末尾结束
char f2(int x,int y)
{int i,j;return 0;
}
int main()
{int b,c;return 1;
}
全局变量的优缺点:
优点:增加了函数与函数之间的数据联系渠道,如果一个函数中改变了全局变量的值,就能影响到其他函数,相当于在各个函数之间有了直接的传递通道,不再需要通过实参和形参来传递参数值了。
缺点:
a.只有在必要的时候才使用全局变量(要谨慎使用),因为全局变量在程序运行整个周期之间都占用内存,而不像函数内的局部变量(当函数执行完毕后,局部变量所占的内存会被系统回收)。
b.降低了函数的通用性,因为函数执行时要以来这些外部的全局变量了,如果将函数迁移到另外一个文件中,那这些相关的外部变量就一起跟着移植过去,并且如果你迁移到另外一个文件中也有同名全局变量,那就更加麻烦。
c.东一个全局变量,西一个全局变量,降低了程序的清晰性和可读性,读程序的人难以清楚的判断每个瞬间各个外部变量的值。(因为很多函数都可以改变全局变量的值),所以,要限制使用全局变量。
#include<stdio.h>
//函数声明
void func1(int tmpvalue);
int c1=4,c2=5;  //全局变量,因为在函数外部定义的
//函数定义
void lookvalue()
{c1=6;  //给全局变量赋值c2=9;return;
}
int main()
{lookvalue();printf("c1=%d\n",c1);printf("c2=%d\n",c2);return 0;
}
总结:
(1)、如果某个函数想 引用在他后面定义的全局变量,则可以用一个关键字叫 extern 做一个“外部变量说明”,表示该变量在函数的外部定义,这样函数内就能使用,否则编译就会出错。
所以,结论是全局变量(外部变量)的定义就放在引用他的所有函数之前,就可以避免使用这个extern。
(2)、要严格区分外部变量与一个外部变量说明
外部变量的定义只能有一次,位置是所有函数之外,定义时会分配内存,定义时可以初始化值;
而同一个文件中,外部变量说明是可以有很多次的(外部变量说明不分配内存),外部变量声明放在最上面,所有函数之外。也可以在每个函数之内做外部变量说明(但是这个声明了的变量仅仅在函数内有效),因此进一步加深了对外部变量说明的理解:所声明的变量是已在外部定义过的变量,extern这个声明,仅仅是为了引用该变量而做的“声明”。
#include<stdio.h>
//函数声明
void func1(int tmpvalue);
extern int c1,c2;  //外部变量说明,表示某个地方定义了c1,c2这两个全局变量。【不是定义,不分配内存的】
//函数定义
void lookvalue()
{c1=6;  //如果这里要使用全局变量的话,就要进行全局变量说明c2=9;return;
}
int c1=4,c2=5;  //定义全局变量,因为在函数外部定义的【是定义,系统会分配内存的】
int main()
{lookvalue();printf("c1=%d\n",c1);printf("c2=%d\n",c2);return 0;
}
(3)、在同一个源文件中,如果全局变量和局部变量同名,则在局部变量作用范围内,全局变量不起作用(当然值也不会受到 影响)。
例题一:
#include<stdio.h>
//函数声明
void func1();
int c1=4,c2=5;  //全局变量,因为在函数外部定义的
//函数定义
int main()
{func1();printf("函数外的c1=%d\n",c1);  //打印出来的全局变量printf("函数外的c2=%d\n",c2);return 0;
}
void func1()
{int c1,c2;c1=100;  //这里是给局部变量赋值,而不是全局变量赋值c2=200;printf("函数内的c1=%d\n",c1);  //打印出来的局部变量printf("函数内的c2=%d\n",c2);
}
例题二:
#include<stdio.h>int a=10,b=20;  //全局变量,因为在函数外部定义的
//函数定义
void lookvalue(int a,int b)
{//在局部变量作用范围内,全局变量不起作用a=100;b=200;return;
}
int main()
{a=4;b=5;printf("函数外的c1=%d\n",a);  //4printf("函数外的c2=%d\n",b);  //5lookvalue(a,b);printf("函数外的c1=%d\n",a);  //4printf("函数外的c2=%d\n",b);  //5return 0;
}

C语言 局部变量和全局变量相关推荐

  1. C语言局部变量与全局变量

    变量,可以定义在函数内,也可以定义在函数外 定义在不同位置的变量,作用域也是不同的 C语言中,按作用域范围可以分为局部变量.全局变量2种类型 局部变量 局部变量就是在函数内部声明的变量,它只在本函数内 ...

  2. C语言局部变量、全局变量、静态局部变量、静态全局变量

    建立三个文件,文件名分别为main.c \ head1.c \  head2.c main.c #include<stdio.h> #include<stdlib.h> #in ...

  3. php局部全局变量,PHP局部变量与全局变量

    一.局部变量 定义:在函数内部声明,且只能在函数内部调用的变量. 注意:参数也是局部变量的一种. demo1: 1 function demo1(){ 2     $age = 10; 3 } 4 5 ...

  4. c 全局变量多线程调用_c语言局部变量 静态局部变量 全局变量与静态全局变量...

    基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

  5. A13在c语言中是合法变量吗,C语言中局部变量和全局变量等在内存中的存放位置.doc-资源下载在线文库www.lddoc.cn...

    C语言中局部变量和全局变量_等在内存中的存放位置.doc C 语言中局部变量和全局变量 变量的存储类别static,extern,auto,register 8.8 局部变量和全局变量在讨论函数的形参 ...

  6. C语言中局部变量和全局变量 变量的存储类别

    C语言中局部变量和全局变量 变量的存储类别(static,extern,auto,register)   局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用 ...

  7. 【C语言局部变量/静态局部变量/全局变量与静态全局变量

    1基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

  8. C语言函数(函数嵌套、递归调用)+局部变量和全局变量+extern关键字的使用+Visual Studio简单的使用教程+数据存储类别+内部函数外部函数

    上一篇文章:编译预处理知识点梳理:宏定义+文件包含+条件编译 C语言函数(函数嵌套.递归调用--+局部变量和全局变量+extern关键字的使用+Visual Studio简单的使用教程+数据存储类别+ ...

  9. c语言局部变量 静态局部变量 全局变量与静态全局变量

    基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

最新文章

  1. java web开发初学_2018年学习Web开发的绝对初学者指南
  2. 82年 AI程序员征婚启示火了!年薪百万,女生神回复
  3. net.sf.json.JSONObject 和org.json.JSONObject 的差别
  4. python 编译器重构_Python之父考虑重构Python解释器
  5. 尽量使用const、enum、inline代替#define
  6. C#中的三种委托方式:Func委托,Action委托,Predicate委托
  7. python sanic_Sanic框架安装与简单入门示例
  8. 无迹卡尔曼滤波(UKF)详解
  9. Java面试之到底值传递和引用传递???
  10. 最短路径算法——迪杰斯特拉(Dijkstra)
  11. char类型怎么输入 c语言_C语言的标准 “输入输出”!今天是你学C语言的第几天?...
  12. C语言通讯录管理系统开发
  13. C语言图形编程|设置位置
  14. 网站备案相关问题解答
  15. PVH Corp.任命Stefan Larsson担任新设总裁职位
  16. 经典的日语歌曲被翻唱成国语
  17. 新手都能用到的140个电脑技巧
  18. 该内存不能为read或written的解决方案
  19. 罗马数字相加java_LeetCode题库 13罗马数字转整数(java)
  20. 数数小绵羊(四刷) kkmd66

热门文章

  1. 阿里云HPC助力新制造 | 上汽仿真计算云SSCC
  2. KEIL5使用JLINK,在DEBUG调试定时器时,遇到的奇怪事情
  3. Linux C应用编程-1-文件IO
  4. 北航计算机学院机器学习导师,北京航空航天大学计算机学院导师教师师资介绍简介-童超...
  5. 只能就读专科学校和专业怎么选择呢?
  6. 使用vue+zrender绘制体温单 三测单(2)
  7. 498.Diagonal Traverse-M
  8. NOI银河英雄传说(并查集)
  9. jenkins搭建记录
  10. 【转载】谢启鸿老师访谈录之二(12级,撰稿人:陈筠臻)