1.局部变量

局部变量也叫auto自动变量(auto可写可不写),一般情况下代码块{}内部定义的变量都是自动变量,它有如下特点:

  • 只有当执行到这句语句时,系统才为这个变量分配空间
  • 在一个函数内定义,只在函数范围内有效
  • 随着函数调用的结束或复合语句的结束局部变量的声明声明周期也结束
  • 复合语句中定义,只在复合语句中有效
  • 如果没有赋初值,内容为随机
  • 不同的{}中,变量的名字可以一样,可以把{}比作房子,不同的房子中可以有同名的小伙伴
#include <stdio.h>

void test()
{
//auto写不写是一样的
//auto只能出现在{}内部
auto int b = ;
} int main(void)
{
//b = 100; //err, 在main作用域中没有b if ()
{
//在复合语句中定义,只在复合语句中有效
int a = ;
printf("a = %d\n", a);
} //a = 10; //err离开if()的复合语句,a已经不存在 return ;
}

2.静态局部变量

在局部变量前面加上static关键字

  • static局部变量的作用域也是在定义的函数内有效
  • static局部变量的生命周期和程序运行周期一样,同时staitc局部变量的值只初始化一次,但可以赋值多次
  • static局部变量若未赋以初值,则由系统自动赋值:数值型变量自动赋初值0,字符型变量赋空字符
  • static局部变量,在编译期间就已经分配空间,函数没有调用前就已经存在
  • 只能用常量初始化
#include <stdio.h>

void fun1()
{
//调用完自动释放
int b = ;
b++;
printf("b = %d\n", b);
} void fun2()
{
//静态局部变量,没有赋值,系统赋值为0,而且只会初始化一次
static int a;
a++;
printf("a = %d\n", a);
} int main()
{
fun1();
fun1();
fun2();
fun2(); return ;
}

静态局部变量在初始化后没有释放,所以第二次调用函数,在原来的基础上操作

如果在函数中有多个形参,形参的创建顺序从右向左

3.全局变量

  • 在函数外定义,可被本文件及其它文件中的函数所共用,若其它文件中的函数调用此变量,须用extern声明

  • 全局变量的生命周期和程序运行周期一样,在编译阶段已经分配空间(函数没有执行前)

  • 不同文件的全局变量不可重名

  • 只能定义一次,可以声明多次

4.全局静态变量

  • 在函数外定义,作用范围被限制在所定义的文件中
  • 不同文件静态全局变量可以重名,但作用域不冲突

  • static全局变量的生命周期和程序运行周期一样,同时staitc全局变量的值只初始化一次,默认值为0

Linux C/C++基础——变量作用域的更多相关文章

  1. Python基础-变量作用域

    1.函数作用域介绍 函数作用域 Python中函数作用域分为4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局 ...

  2. linux shell自定义函数(定义、返回值、变量作用域)介绍

    http://www.jb51.net/article/33899.htm linux shell自定义函数(定义.返回值.变量作用域)介绍 linux shell 可以用户定义函数,然后在shell ...

  3. Java基础-变量的定义以及作用域详解

    Java基础-变量的定义以及作用域详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字面量 常量(字面量)表示不能改变的数值(程序中直接出现的值).字面量有时也称为直接量,包 ...

  4. 基础系列(1)之干掉JavaScript变量作用域

     今天去某顺公司面试,发现一些基础知识都不记得了,于是乎决定把js基础系列的全部梳理一遍,今天就整理下js变量作用域的相关基础知识点,配合最常遇到的笔试题阐述. 题一: var g = "a ...

  5. linux bash变量作用域

    linux bash变量作用域 一,思考一个问题,当在shell里执行某个程序时,shell是怎么找到这个程序的? shell会去$PATH环境变量定义的目录里去找这个命令.环境变量里一般包括/usr ...

  6. Java基础知识笔记(七:接口、变量作用域和参数传递)

    一.接口 Java语言不允许一个子类拥有多个直接父类,即任何子类只能有一个直接父类.但允许一个类实现多个接口,即在定义类的接口名称列表中可以包含1个或多个接口名称,从而实现多重继承的特性.接口的定义格 ...

  7. JavaScript基础——理解变量作用域

    一旦你开始在JavaScript应用程序中添加条件.函数和循环,就需要理解变量作用域.变量作用域规定了如何确定正在执行的代码行上的一个特定变量名的值. JavaScript允许你既定义全局版本又定义局 ...

  8. [Objective-c 基础 - 2.5] .h和.m文件,点语法,成员变量作用域

    A. 命令行编译和XCode编译 1.在存在多个.m源码实现文件的情况下,若根据需要引入.m文件,使用命令行仅仅编译主.m文件即可,但是XCode会同时编译全部.m文件,会发生编译错误(重复定义全局变 ...

  9. 4、TensorFlow基础(二)常用API与变量作用域

    1.图.操作和张量 TensorFlow 的计算表现为数据流图,所以 tf.Graph 类中包含一系列表示计算的操作对象(tf.Operation),以及在操作之间流动的数据 — 张量对象(tf.Te ...

随机推荐

  1. 使用js拆分带参数的URL,将参数分离出来

    url中的内容www.XXXX.com?content=123; 一下为js内容,包装在一个init方法中. init(); function init(){ var theRequest = new ...

  2. Java-判断是否为回文数

    /** * @ClassName: IsPalindrome * @author: bilaisheng * @date: 2017年9月19日 下午2:54:08 * 判断是否为回文数 * true ...

  3. numpy常用矩阵操作

    1.删除列 column_to_delete = [0, 1, 2] arr = np.delete(arr, [0, 1, 2], axis=1) 2.归一化 arr = normalize(arr ...

  4. 【C#-批量插入数据到数据库】DataTable数据批量插入数据的库三种方法:SqlCommand.EcecuteNonQurery(),SqlDataAdapter.Update(DataTable) ,SqlBulkCopy.WriteToServer(Datatable)

    第一种方法:使用SqlCommand.EcecuteNonQurery()  效率最慢 第二种方法:使用SqlDataAdapter.Update(DataTable)   效率次之 第三种方法:使用 ...

  5. 【Python之路】异步IO

    线程:CPU基本执行单元,可以与同属一个进程的其他线程共享资源,线程是属于进程的. 进程:资源单元,进程一般由程序.数据集.进程控制块三部分组成.一个进程默认有一个主线程, GIL:用于在进程中对所有 ...

  6. spark实现smote近邻采样

    一.smote相关理论 (1). SMOTE是一种对普通过采样(oversampling)的一个改良.普通的过采样会使得训练集中有很多重复的样本. SMOTE的全称是Synthetic Minorit ...

  7. Hadoop-2.7.5完全分布式搭建

    1.在虚拟机上安装Hadoop完全分布式准备工作 1)这里使用的是VMWare软件,在VMWare上安装一个CentOS6.5,并再克隆两个机器配置相关MAC地址,以及配置机器名 2)三台虚拟机配置好 ...

  8. spark streaming 5: InputDStream

    InputDStream的继承关系.他们都是使用InputDStream这个抽象类的接口进行操作的.特别注意ReceiverInputDStream这个类,大部分时候我们使用的是它作为扩展的基类,因为 ...

  9. Windows 设置定时任务

    cmd 运行 control 命令打开控制面板,找到 管理工具 -> 任务计划程序 一.添加定时任务 创建任务 基本信息 触发器,这里设置开机启动 操作,这里执行一个程序.若为脚本,注意起始于路 ...

  10. php的core问题

    我们在编写代码的时候,可能会发现,路径下多了一个类似这样的文件, 拿php举例  :  core.php_bin.4528.1379650721 这是因为我们在编写代码时候,出现了指针溢出,段错误等问 ...