【C语言】全局变量、局部变量和静态变量的区别

C 语言中的静态变量和全局变量有何区别? 在 C 语言中,静态变量(Static Variables)和全局变量(Global Variables)是两种具有不同特性和用途的变量类型。理解它们之间的区别对于编写高效、可靠和可维护的 C 程序至关重要。全局变量存储在静态存储区,程序在编译时就为其分配了存储空间,并且在程序的整个运行期间都存在。全局变量的作用域是从其定义的位置开始,到整个源文件结束。在其他源文件中,如果要使用全局变量,需要使用 `extern` 关键字进行声明。 阅读详情

一、变量

1、变量定义
变量的名称可以由字母、数字和下划线字符组成,它必须以字母或下划线开头,C语言区分大小写;C 语言也允许定义各种其他类型的变量,比如枚举、指针、数组、结构、共用体等等。

变量就是程序可操作的存储区的名称,变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,例如:

type variable; 	
type variable1,	variable2...;
type variable = value; 	// 变量可以在声明的时候被初始化(指定一个初始值)

type 必须是一个有效的 C 数据类型,可以是 char、w_char、int、float、double 或任何用户自定义的对象,variable可以由一个或多个标识符名称组成,多个标识符之间用逗号分隔。
2、变量声明
变量声明向编译器保证变量以指定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。

变量的声明有两种情况:

(1)一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。
(2)另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。 例如:extern int a 其中变量 a 可以在别的文件中定义的。

extern int i; //声明,不是定义
int i; //声明,也是定义

除非有extern关键字,否则都是变量的定义。

如果需要在一个源文件中引用另外一个源文件中定义的变量,我们只需在引用的文件中将变量加上 extern 关键字的声明即可。

#include <stdio.h>
/*外部变量声明*/
extern int a;
extern int b;
int add()
{
    return a + b;
}

(一)全局变量

全局变量是定义在函数外部,通常是在程序的顶部。全局变量在整个程序生命周期内都是有效的,在任意的函数内部能访问全局变量。全局变量可以被任何函数访问,也就是说,全局变量在声明后整个程序中都是可用的。
注意:

  1. 在程序中,局部变量和全局变量的名称可以相同,但是在函数内,如果两个名字相同,会使用局部变量值,全局变量不会被使用,也就是说,函数内部的定义的局部变量优先级高于全局变量。
  2. 全局变量不属于某个函数,它的有效范围定定义该全局变量的位置开始直至源文件结束。
  3. 全局变量允许多个函数对某个变量进行修改,但破坏了函数的独立性。
  4. 全局变量在程序执行过程中始终占用存储单元,而局部变量只有在使用的时候才会分配存储空间。

例如:

#include <stdio.h>
/*全局变量声明*/
int a;
int b;
int add()
{
    return a + b;
}

(二)局部变量

在某个函数或块的内部声明的变量称为局部变量,它们只能被该函数或该代码块内部的语句使用,局部变量在函数外部是不可知的。
注意:

  1. 形参属于被调函数的局部变量,实参则属于主调函数的局部变量。
  2. 不同的函数中,可以使用相同的局部变量名。
  3. 主函数中的变量只能在主函数中使用,不能在其他函数中使用。
  4. 复合语句中定义变量,其作用域只能在复合语句范围内。
  5. 局部变量只有在使用的时候才会分配存储空间,使用结束后回收。

例如:

int main ()
{
  /* 局部变量声明 */
  int a, b;
  int c;
  /* 实际初始化 */
  a = 10;
  b = 20;
  c = a + b;
  printf ("value of a = %d, b = %d and c = %d\n", a, b, c);
  return 0;
}

(三)静态变量

静态变量的修饰关键字是static,static可以作用于变量以及函数。由static修饰的,可分为静态局部变量,静态全局变量,静态函数。静态变量的生命期和程序生命期是一样的,在程序结束之后操作系统会回收存储空间。 静态变量属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。

(1)静态全局变量

在全局变量的定义前加上static就构成了静态全局变量,静态全局变量只初使化一次,防止在其他文件单元中被引用。静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。
例如:

#include <stdio.h>
/*静态全局变量声明*/
static int a;
static int b;
int add()
{
    return a + b;
}

(2)静态局部变量

在局部变量的定义前加上static就构成了静态局部变量,静态局部变量只会被初始化一次,下次使用依据上一次保存的值。静态局部变量在函数内定义 ,它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。

静态局部变量是一种生存期为整个源程序的变量,虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了上次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。
例如:

#include <stdio.h>

int add(int x,int y){
    return x + y;
}

int main(){
    static int a = 10;
    static int b = 5;
    int result;
    result = add(a,b);
    printf("sum: %d",result);

    return 0;
}

二、常量

常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。
常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。
常量就像是常规的变量,只不过常量的值在定义后不能进行修改。

在 C 语言中,有两种简单的定义常量的方式:
1、使用 #define 预处理器

#define identifier value

例如:

#include <stdio.h>
//	此时,a和b为常量,其值不可被修改
#define a 10  
#define b 20  
int add()
{
    return a + b;
}

2、使用 const 关键字
const 声明常量要在一个语句内完成,尽量把常量定义为大写字母形式

const type VAR= value;
const int VAR= 5;	//	正确定义
const int VAR;		//	错误定义
//	错误定义
const int VAR;		
VAR= 5;
局部、局部静态、全局、全局静态变量联系区别 局部、局部静态、全局、全局静态变量联系区别: 首先明白6大作用域:全局作用域、局部作用域、文件作用域、命名空间作用域、语句作用域、类作用域 1.从作用域区别: 局部与局部静态变量作用与局部作用域; 全局变量作用与全局作用域,若一个程序中有多个源文件,它定义与一个源文件,即所有文件都可以通过extern关键字使用全局变量,链接属性为外部; 全局静态变量则作用与文件作用域,即当程序中有多个源 阅读详情

相关推荐

C语言—static 的作用、局部变量全局变量、内存结构、堆栈区别

static 在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数 一、定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量。 全局静态变量有以下特点: (1)在全局数据区内分配内存 (2)如果没有初始化,其默认值为0 (3)该变量在本文件内从定义开始到文件结束可见(这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是ext...

Silence_Fall的博客 4694

静态变量static

在开始介绍什么是静态变量之前,我们先来介绍什么是静态存储方式? 1、基本概念 静态存储方式:指在程序运行时,给变量分配固定的存储空间的方式 2、 静态存储区存放以下变量: 全局变量:在程序开始执行时给全局变量分配存储区,程序运行完毕之后释放。在程序运行过程中它们占据固定的存储单元而不动态进行分配和释放。 静态变量:有时希望变量的值在函数调用结束后不消失而保留原值,这时就应该指定变量为“静态变量”,用关键字static进行命名 用static声明的静态变量的三个作用: 1. 隐藏与隔离的作用 全局变量的

liu_jiang666的博客 2万+

华为C语言笔试题(附答案)

华为C语言笔试题(附答案)     1、局部变量能否和全局变量重名?   答:能,局部会屏蔽全局。要用全局变量,需要使用 ":: "   局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。  

峰云四起 3033

什么是静态变量 举例 C语言入门

欢迎关注笔者,你的支持是持续更博的最大动力 目录相关描述代码举例其他 相关描述 局部变量:定义在函数内部的变量(函数的形参也是局部变量),只能在定义它的函数内部使用 全局变量:定义在函数外面的变量,所有函数都可以使用 静态变量:有全局变量、前面加了“static”关键字的局部变量 区别: 静态变量的存放地址,在整个程序运行期间,都是固定不变的。 非静态变量(一定是局部变量)地址每次函数调用时都可能不同,只在函数的一次执行期间不变 如果没明确初始化,则静态变量会被自动初始化成全0(每个bit都是0),.

橘子冰的博客 1万+

保姆级教程:用Python从UCI下载波士顿房价数据集,手把手跑通线性回归、岭回归和Lasso

本文提供了一份保姆级教程,详细讲解如何用Python从UCI下载波士顿房价数据集,并手把手实现线性回归、岭回归和Lasso回归模型。内容涵盖数据获取、清洗、特征分析到模型构建与评估的全流程,特别适合机器学习初学者掌握波士顿房价预测这一经典案例。

weixin_34254848的博客 476

elmos 524系列芯片笔记

芯片的工作工作原理:集成芯片Elmos524.03有发射回路和接收回路,手册有关的内部原理图,大致如下: 芯片会产生固有频率的电压信号,信号通过引脚DRV1、2输出给外部压电陶瓷片,产生固定频率的机械波,也就是所谓的超声波,超声波遇到障碍物时会反射,反射信号经过AINS、D引脚进入芯片,在芯片内部先后经过GAIN放大,滤波然后进入比较器,滤波后的信号(signal)同预先设定的阈值(threshold)比较产生信号输出。此信号最终会连接MCU处理器,需要重点关注。 基于这个内部的工作原

qq_38230916的博客 2484

全局变量、局部变量、静态全局变量、静态局部变量的区别

  文章转载至全局变量、局部变量、静态全局变量、静态局部变量的区别   C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。 从作用域看:   全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全...

1034

C++中const和指针*的组合问题

今天在复习> 章节7.3的时候想到以前做的一个题,const和指针运算符*的若干种组合的合法性和意义问题,有点混淆,所以写了一个测试代码来验证一下,简单明了,一目了然。如果有什么遗漏的话欢迎指出。 首先是在Ubuntu14.04.1下用gcc 4.8.4编译运行的结果,编译器报错信息都附加在对应语句后面的注释里 /* * Note : Test for the combinations of

theColdOne的专栏 1081

C语言中全局变量、局部变量、静态变量的区别(嵌入式)

在C语言中,根据变量的作用域和生命周期的不同,可以将变量分为全局变量、局部变量和静态变量。而在嵌入式系统中,这些变量有着特定的用途和行为。理解这些变量的区别对于编写高效、可靠和易于维护的嵌入式代码非常重要。本文是本人对这些变量的理解,有不足或错误之处,欢迎批评指正。全局变量是在所有函数之外定义的变量,可以在整个文件或多个文件中访问。局部变量是在函数内部或复合语句内部定义的变量。函数内的静态变量:在函数内部定义,但其生命周期为整个程序运行期间。文件内的静态变量:在文件内部定义,但其作用域限制在该文件内。

weixin_51789234的博客 1332

信号完整性基础04:串扰(1)

我们理解了“单个”传输线(传输线是信号路径+回流路径,切记~),但大多数情况下单独“传输线”的情况并不多见(理想情况下的同轴线缆可以算一个),大多数我们PCB板上有成百上千条走线,它们组成了一个“大社会”,就如当年的TVB神剧《创世纪》一样,到处充满着恩怨情仇;稍处理不慎,单板这个“社会”就会崩溃。那么我们要从哪里入手去理解它呢?最基本的就是从两条PCB走线(传输线)之间的串扰开始。好,年前倒数第二章:《为什么会有串扰》。 ps:我们了解了x射线是啥,那么今天开始讲“放射线”,这两种东西是否就是同一种呢~

WKEZHENG的博客 6032

dify进阶:使用 FastAPI 的 StreamingResponse 实现高效的数据流传输

在 FastAPI 框架中,是一个非常有用的工具,它允许你以流的方式发送数据给客户端,而不是一次性加载所有内容到内存中再发送。这对于处理大型文件下载、视频流或者任何需要长时间处理的任务特别有用。

xiezhipu的博客 1433

C语言局部变量,全局变量,静态变量,动态变量的区别与联系

变量与常量 变量:指的是在程序运行过程中,可以通过代码使他的值改变的量。 常量:程序运行过程中不会改变的量。 局部变量 局部变量:定义在函数中的变量。 全局变量 全局变量:定义在函数外面的变量。 #include<stdio.h> int g_a; //定义在函数外面叫全局变量 int main(void) { int a; ...

初学者探索之路,认真当条汪 5693

91、Windows网络配置:动态更新与名称解析全攻略

本文全面解析了Windows XP Professional系统中的网络配置方法,重点介绍了动态更新和名称解析两大核心功能。动态更新部分涵盖DHCP客户端、静态配置客户端、远程访问客户端和多宿主客户端的配置方法,并提供禁用动态更新和编辑Hosts文件的注意事项。名称解析部分详细讲解了NetBIOS名称解析的基础知识、WINS配置方法、B节点广播与Lmhosts文件的使用,以及WINS代理的作用和配置要点。通过操作建议流程图和关键操作步骤回顾,帮助用户快速掌握网络配置的核心技巧,适用于不同网络环境的实际需求。

blue42的博客 234

【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别

局部变量:    创建在栈区(向下生长),生命周期存在于当前作用域中。    创建时若未初始化,则为随机值。全局变量:    创建在static区,生命周期一直存在。    创建时若未初始化,则为0。静态局部变量:    切断了外部链接属性。创建在static区。     创建时若未初始化,则为0。全局变量和静态变量的存储是放在一块的,初始化了的全局变量和静态变量在一块区域,  未初始化的全局变量

hanjing_1995的博客 1125

【产品】 产品设计:如何解决铝合金氧化着色后表面硬度低的问题(硬质氧化)

1、氧化处理技术 1)化学氧化 化学氧化处理所获得的膜层较薄,一般厚度为0.5μm ~4μm,质软不耐磨,抗蚀能力低于阳极氧化膜。 一般不宜单独便用,由于化学氧化膜吸附能力好,主要作用于油漆的底层,化学氧化按其溶液性可分为碱性和酸性两种。按其膜层性质可分为氧化膜,磷酸盐膜、铬酸盐膜及磷酸一铬酸盐膜等(这类型的氧化膜是可导电)。 2)电化学氧化(阳极氧化) 电化学氧化(俗称阳极氧化)是铝及...

产品线负责人 9728

SAP FICO 科目余额查询表开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP FICO 科目余额查询表开发说明书(包括开发源代码、测试样例)

我好像病了的博客 1041

【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别...

局部变量:创建在栈区(向下生长),生命周期存在于当前作用域中。 创建时若未初始化,则为随机值。全局变量:创建在static区,生命周期一直存在。 创建时若未初始化,则为0。静态局部变量:切断了外部链接属性。创建在static区。 创建时若未初始化,则为0。全局变量和静态变量的存储是放在一块的,初始化了的全局变量和静态变量在一块区域,...

weixin_33857679的博客 227

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

c语言中静态局部变量的作用域,【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别...

局部变量:创建在栈区(向下生长),生命周期存在于当前作用域中。创建时若未初始化,则为随机值。全局变量:创建在static区,生命周期一直存在。创建时若未初始化,则为0。静态局部变量:切断了外部链接属性。创建在static区。创建时若未初始化,则为0。全局变量和静态变量的存储是放在一块的,初始化了的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。全局静态变量:...

weixin_30946627的博客 1360

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C语言再学习之:局部变量,局部静态变量,全局变量和全局静态变量的区别

一般全局变量存放在数据区,局部变量存放在栈区, 动态变量存放在堆区,函数代码放在代码区。 一般全局变量存放在数据区,局部变量存放在栈区, 动态变量存放在堆区,函数代码放在代码区。  ---------------------------------------------------------------  栈区是普通的栈数据结构,遵循LIFO后进先出的规则,局部变

Cheatscat的博客 1330

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【C语言】关键字static——static修饰局部变量、全局变量和函数详解!

static修饰局部变量、全局变量、函数,详解!

2302_76305195的博客 1万+

c语言全局变量和局部变量问题汇总

1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量? 答:exte

yongzi123的专栏 6万+

c语言全局变量和局部变量

c语言全局变量和局部变量1、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。要用全局变量,需要使用::      (注:在Linux中用gcc编译可能会出错,需要用g++编译)局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义

Cynric 的博客 2094

C语言内存

一.几个概念 全局变量(外部变量):出现在代码块{}之外的变量就是全局变量。 局部变量(自动变量):一般情况下,代码块{}内部定义的变量就是自动变量,也可使用auto显示定义。 静态变量:是指内存位置在程序执行期间一直不改变的变量,用关键字static修饰。代码块内部的静态变量只能被这个代码块内部访问,代码块外部的静态变量只能被定义这个变量的文件访问。 二.内存四区 代码区------程序被操作系...

Hello_World_10的博客 375

static全局变量 和 非static全局变量的区别

全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静

Evolution 2832

C语言中局部静态变量的特点

C语言存在以下三种作用域: 全局变量 文件内部的静态变量 局部变量 思维导图如下: 全局变量、静态变量(包括上图中的“文件内部的静态变量”和“局部静态变量”)都具有静态存储期,变量的寿命周期从程序运行时即开始,到程序关闭时结束,其一直存在于内存的同一个地址上。 也就是说,可以将局部静态变量理解为一种限定了作用范围的全局变量。其声明语句的位置与其被创建的位置无关,仅与其作用范围有关。 相关概念补充: 1.局部自动变量的存储期: 局部自动变量的存储期被称为“自动存储期”,在程序进入它所在的语句块时被分配以内

米糊的头发箱(码代码掉的头发都在这里了) 1167

全局变量和局部变量在静态static修饰后的区别

静态全局变量和非静态全局变量的区别 在全局变量的说明之前再加以static 就构成了静态的全局变量。 全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。 这两者的区别:非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它

P.L.C的博客 1668
上一篇: 【C语言】C语言数据类型
下一篇: 【C语言】数组的声明和使用(一维数组、多维数组、字符数组)
白码王子小张
博客等级 码龄7年 6665粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值