当前位置: 首页 > 编程日记 > 正文

【转载】C语言变量详解

原链接:http://gaga.yo2.cn/articles/detailed-c-language-variables-review.html

刚做题时发现全局变量会自动初始化,如int型则自动初始化为0,double则初始化为0.000000....。而局部变量如果没有初始化的话,初值为一随机数。于是很好奇,找了点资料,发现果然如此。

一。变量的存储类型

C语言中的变量存储类型有4种,分别为auto(自动变量),static(静态变量),extern(外部变量),register(寄存器变量)

1.全局变量的存储类型:

static和extern两种,其中extern是缺省的全局变量存储类型

int x,y=5;//默认为外部全局变量

extern int a=1,b=2;//定义外部全局变量,使用关键字extern后,必须进行初始化!

static float f1,f2;//静态全局变量

void main()

{

..........

}

extern型全局变量通过外部全局变量说明可以被其他源程序引用,而static星的全局变量只能局限在本源程序文件中使用

如果使用了关键字extern,则必须对这个外部全局变量进行出示化,否则编译程序会把它当作外部变量的声明(说明)

2.局部变量的存储类型:

C语言种的局部变量的存储类型有如下3种:auto,static,register。其中auto是缺省的局部变量存储类型!

void main()

{

auto int a;//自动变量

fioat f;//自动变量

static int i;//静态变量

register double d;//寄存器变量,要求编译器使用CPU寄存器来存储变量值

}

C语言函数定义中的形参也是局部变量,形参的默认存储类型是auto,也可以指定形参的存储类型是register,但不允许指定形参的村塾类型为static!

二。变量的生存期

C语言的变量生存期有2种:全程生存期,动态生存期。

1.全程生存期

指变量在程序运行一开始就被建立,而在程序运行结束后才从内存中删除。

具有全程生存期的变量是全局变量和静态变量

具有全程生存期的变量存储在程序的静态数据存储区中

2.动态生存期

指变量在程序运行过程中,因需要使用才建立,而使用结束就被删除

具有动态生存期的变量有:局部自动变量,寄存器变量

具有动态生存期的变量存储在程序的动态数据区中

对于复合语句种定义的auto型的局部变量,每当程序运行至该语句时,就会在动态数据区建立这些局部变量的存储空间,而一旦程序流程离开该复合语句时,该复合语句种的局部变量将被系统从内存种删除

3.变量的初始化

具有全局生存期的变量(包括数组)在定义时如果没有初始化,则初值自动为0;而具有动态生存期的变量未初始化时,初值为一随机数!

    具有全局生存期的变量在定义时如有初始化,则初始化在程序刚开始运行建立静态数据区时会被执行一次,以后再也不会执行初始化操作。而动态生存期的变量在定义时如有初始化,则每当程序创建该变量时都会执行初始化。

static double a[10];

int b[5];double x,y;static char ch;

void main()

{

static long p[8];

static float g;

}

上述变量都为全局生存期变量,所以初值都时0!

注意:如果在函数中使用静态局部变量,由于静态局部变量的初始化只执行一次,故当第2次调用该函数时,不会对静态局部变量进行再次初始化;又由于静态局部变量时全程生存期的,所以静态局部变量的值为上次结束函数调用时的值!

#include "stdio.h"

void f()

{

int a =0;//自动局部变量

static int c;//静态局部变量

a++;c++;

printf("%d,%d,",a,c)

}

void main()

{

int k;

for(k=1;k<=4;k++)

f();

}

输出结果:1,1,1,2,1,3,1,4

解析:

由于a时自动变量,即为动态生存期变量,所以每次调用函数f()时都要进行初始化,故每次输出都时1。

而b为静态局部变量,即为全局生存期变量,所以只是在第一次调用函数f()时进行初始化,在接下来函数f的调用中

b的值为上次函数结束时的值

转载于:https://www.cnblogs.com/zen_chou/archive/2009/05/19/1460227.html

相关文章:

Matlab编程与数据类型 -- 多分支条件选择语句if/elseif/…/else/end

本微信图文详细介绍了Matlab中if/elseif/…/else/end多分支条件选择语句。

图解c/c++多级指针与“多维”数组

2019独角兽企业重金招聘Python工程师标准>>> 前言 指针与数组是C/C编程中非常重要的元素&#xff0c;同时也是较难以理解的。其中&#xff0c;多级指针与“多维”数组更是让很多人云里雾里&#xff0c;其实&#xff0c;只要掌握一定的方法&#xff0c;理解多级指针和…

信科c语言实验程序修改题_豆瓣评分 9.3,史上最好的 C 语言著作,竟然翻车了.........

上周&#xff0c;在小编的各种努力下(省略一万字)&#xff0c;Kindle 官方终于答应给我一个广告位了。虽然只是开机屏&#xff0c;但我还是笑出了猪叫&#xff0c;毕竟上一次有这待遇还是 2018 年时的《算法图解》。所以错过了上次&#xff0c;这次我一定要亲眼见证这个时刻。我…

Nodejs Express dockerfile最佳实践

少啰嗦&#xff0c;先看代码 package.json {"name": "xxx","version": "0.0.0","private": true,"scripts": {"start": "node ./bin/www","forever": "node_modules/forever/…

Matlab编程与数据类型 -- 开关语句switch/end

本微信图文详细介绍了Matlab中switch/end开关语句。

安装ATi显卡驱动后增加的鼠标右键菜单的清理

一般最直接的方法是&#xff1a;一般位于注册表的&#xff1a;删除注册表HKEY_CLASSES_ROOT\Directory \Background\shellex\ContextMenuHandlers\ACE下 ab默认{5E2121EE-0300-11D4-8D3B-444553540000}办法一&#xff1a;刚才有朋友询问了ATi显卡在安装CATALYST Control Center…

15crmo焊接后多长时间探伤_15CrMo十五铬钼属于合金钢?、下面来解释一下

15CrMo十五铬钼属于合金钢​&#xff0c;主要用于石油、石化、高压锅炉等&#xff0c;专门用途的无缝管有锅炉用无缝管、地质用无缝钢管及石油用无缝管等多种。​一、15CrMo化学成分&#xff1a;C:0.12-0.18 Mn&#xff1a;0.40-0.70 Si&#xff1a;0.17-0.37 Cr&#xff1a;0.…

VTL-vm模板的变量用法

加载foot模块页 #parse("foot.vm") #foreach($item in $tables) #set($strEnd $item.Length - 1) #set($sheetName $item.Substring(0, $strEnd)) <option value"$item">$sheetName</option> #end $strEnd也可以看做一个字符串来操作 $it…

百度云磁盘CDS、对象存储BOS技术深度解析

在BAT中&#xff0c;百度在公有云也有很多技术创新。比如2013年引起广泛关注的ARM存储服务器就是一个很好的例子。最近两年&#xff0c;百度云开始发力&#xff0c;其云存储体系有诸多创新之处。目前百度云存储形成了以块存储、对象存储、文件存储为核心&#xff0c;VPN/专线、…

Matlab编程与数据类型 -- 出错处理语句try/catch/end

本微信图文详细介绍了Matlab中try/catch/end出错处理语句。

linux设置nexus开机自启动_在linux中使用nexus搭建maven私服

首先介绍下为什么要搭建maven私服&#xff0c;简单点说就是就是把项目工程中的Jar包放在一个服务器上&#xff0c;每次Jar包的修改都能去私服上面Down到本地。可以对整个项目组的人形成一个统一的管理。2、下载完之后就是这个了&#xff1a;我这个是目前最新的版本了&#xff0…

Lintcode42 Maximum Subarray II solution 题解

【题目描述】Given an array of integers, find two non-overlapping subarrays which have the largest sum.The number in each subarray should be contiguous.Return the largest sum.Notice:The subarray should contain at least one number给定一个整数数组&#xff0c;…

const用法详解

面向对象是C的重要特性. 但是c在c的基础上新增加的几点优化也是很耀眼的 就const直接可以取代c中的#define 以下几点很重要,学不好后果也也很严重 const 1. 限定符声明变量只能被读 const int i5; int j0; ... ij; //非法&#xff0c;导致编译错误 ji; //合法 2. 必…

Matlab编程与数据类型 -- continue、break和return语句

本微信图文详细介绍了Matlab中的continue、break和return语句。

mysql 修复_修复崩溃的Mysql

在mysql的配置文件my.cnf里找到 [mysqld]字段下&#xff0c;添加 innodb_force_recovery 1如果innodb_force_recovery 1不生效&#xff0c;则可尝试2——6几个数字然后重启mysql&#xff0c;重启成功。然后使用mysqldump或 pma 导出数据&#xff0c;执行修复操作等。修复完成…

window.open(url?param=+paramvalue) 服务端 乱码问题解决

window.open("url?param"paramvalue)传递参数出现乱码&#xff0c;在客房端显示是正常的&#xff0c;可是到服务端就是乱码。 1. 利用一个js在客户端转码的函数&#xff0c;escape(str);但是传到服务端仍然是乱码&#xff0c;所以必须在服务端进行解码。 2. 服务端执…

Matlab编程与数据类型 -- 数据类型概述

本微信图文详细介绍了Matlab中的数据类型&#xff0c;数值型和逻辑型举例介绍&#xff0c;其它类型在相应图文进行介绍。

初识mysql数据字段属性_初识mysql

# 经典sql语句 创建数据库- CREATE DATABASE database_name; 删除数据库- DROP DATABASE database_name; 创建备份数据库- USE masterEXEC sp_addupdevice disk,testBack ,c:\xxx\xxx.dat 开始备份- BACKUP DATABASE pubs TO testBack;--- 创建表- 创建新表 create table tab_n…

ceph存储引擎bluestore解析

原文链接&#xff1a;http://www.sysnote.org/2016/08/19/ceph-bluestore/ ceph后端支持多种存储引擎&#xff0c;以插件式的方式来进行管理使用&#xff0c;目前支持filestore&#xff0c;kvstore&#xff0c;memstore以及最新的bluestore&#xff0c;目前默认使用的filestor…

Matlab编程与数据类型 -- 字符型数组

本微信图文详细介绍了Matlab中的字符串类型。

最近想做个音乐共享的软件

准备分如下几部分&#xff1a; 1.配置文件xml读写 2.播放器部分&#xff1a;开始准备用mediaplay做&#xff0c;发现有个开源的播放器&#xff0c;可以考虑 3.网络部分&#xff1a;主要是种子搜索和更新 准备召唤有兴趣的达人一起开发转载于:https://www.cnblogs.com/donneymin…

精通mysql_《深入精通Mysql(五)》实战:Mysql实现主从复制

深入精通Mysql系列其他文章推荐&#xff1a;一、前言随着应用业务数据不断的增大&#xff0c;应用的响应速度不断下降&#xff0c;在检测过程中我们不难发现大多数的请求都是查询操作。此时&#xff0c;我们可以将数据库扩展成主从复制模式&#xff0c;将读操作和写操作分离开来…

一个开发团队、软件公司,团队工作氛围很重要,没有好氛围难出好产品、好项目...

接触软件行业很多年有些年头了&#xff0c;展望过去的岁月&#xff0c;总想写点儿东西&#xff0c;总结总结&#xff0c;我也不怕拍砖了&#xff0c;曾经也换过很多公司、跳过很多槽&#xff0c;现在想想&#xff0c;总结出来&#xff1a;“天下的乌鸦是一样黑的”&#xff0c;…

Matlab编程与数据类型 -- 奇数阶魔方矩阵的编程

本微信图文详细介绍了利用Matlab实现奇数阶魔方矩阵的编程。

Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)

2019独角兽企业重金招聘Python工程师标准>>> 本文节选自《Netkiller Database 手札》 第 63 章 Apache Hive 目录 63.1. 安装 Apache Hive 63.1.1. MySQL 63.1.2. Hadoop 63.1.3. Hive 63.1.4. 启动 Hive 63.1.5. 访问 Hive 63.2. 管理 Hive 63.2.1. 表管理 63.2.1.…

mysql的profile_Mysql分析-profile详解

一。前言当我们要对某一条sql的性能进行分析时&#xff0c;可以使用它。Profiling是从 mysql5.0.3版本以后才开放的。启动profile之后&#xff0c;所有查询包括错误的语句都会记录在内。关闭会话或者set profiling0 就关闭了。(如果将profiling_history_size参数设置为0&#x…

2003網域升級到2008網域以及遷移DNS

2003網域升級到2008網域以及遷移DNS 如圖這是我們現在的拓撲&#xff0c;cc從現用的LCS2008網域升級到2008網域&#xff0c;並一步步截圖給大家示範說明。隨便抓了臺虛擬機&#xff0c;是以前做LCS試驗用的&#xff0c;現在不用了&#xff0c;正好給大家示範2003升級到2008網域…

FPGA管脚约束

Edit → language templates &#xff1a; 打开即可查看基本语法。 一、xilinx中的约束文件 1、约束的分类 利用FPGA进行系统设计常用的约束主要分为3类。 &#xff08;1&#xff09;时序约束&#xff1a;主要用于规范设计的时序行为&#xff0c;表达设计者期望满足的时序条件&…

Matlab数据的可视化 -- 线性图函数plot

本篇微信图文主要介绍Matlab数据可视化方面的内容。

日志文件和mysql同步到kafka_logstash_output_kafka:Mysql同步Kafka深入详解

0、题记实际业务场景中&#xff0c;会遇到基础数据存在Mysql中&#xff0c;实时写入数据量比较大的情景。迁移至kafka是一种比较好的业务选型方案。而mysql写入kafka的选型方案有&#xff1a;方案一&#xff1a;logstash_output_kafka 插件。方案二&#xff1a;kafka_connector…