C语言的变量存储方式和生存期
2020.2.28日,封城一个多月了,紧邻毕业期,我在家抽空学习一下C。
看到了变量的存储方式和生存期这一章节,下面就是我整理的内容
下面是用于理解静态局部变量这个概念所写的代码,主要是需要分析一下函数f()中 静态局部变量c的变化,我们可以明显的发现c在三次调用结束后的值分别是4、5、6,静态局部变量还有一个明显特点是在编译时就赋初值,程序运行时就有初值,以后每次调用不再赋初值而只是保留上次函数调用结束的值。自动变量赋初值不是在编译的时候进行,而是在函数调用的时候进行,每调用一次相当于执行一次赋值语句(题外话插一句,C中的静态局部变量和matlab中persistent定义的变量其实是一个意思,因为我在simulink中调用matlab function时会用到这,所以提一下)
#include<stdio.h>
int main()
{ int f(int); //函数声明
int a = 2, i; //自动局部变量
for (i = 0; i < 3; i++)
printf("f(a) = %d\t", f(a)); //输出f(a)的值,c的值在三次调用结束后的值分别是4、5、6
return 0;
}
int f(int a)
{ auto int b = 0; //自动局部变量
static int c = 3; //静态局部变量
b = b + 1;
c = c + 1;
return(a + b + c);
}
其实后面还讲到了变量的作用阈和生存期,以及静态函数(只作用于本文件的函数,需要用Static声明) 外部函数(可供其他文件调用的函数,默认的,也可以用extern声明),只不过我比较懒,就不往上写了,如果后期碰到相关的项目或者习题需要用到,我再详细解释,加深印象!
参考文献【1】C语言程序设计第四版,P204-217
C语言的变量存储方式和生存期的更多相关文章
- C语言学习笔记:12_变量的存储方式和生存期
/* * 12_变量的存储方式和生存期.c * * Created on: 2015年7月5日 * Author: zhong */ #include <stdio.h> #include ...
- C语言的变量的作用域和生存期
一.c程序存储空间布局 C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分:一个程序只有一个副本:只读,防止程序由于意外事故而修改自身指令: 2)初始化数据段(数据段)——在 ...
- C语言基础--变量存储细节
1.变量为什么要有类型? 每种类型占用的内存空间不一样 int 4, char 1 double 8 2.只要定义变量, 系统就会开辟一块存储空间给我们的变量存储数据, 内存寻址是从大到小 3.越 ...
- go语言返回变量存储地址
package main import "fmt" func main() { e:= fmt.Println(e) fmt.Println(&e) //&e; 将 ...
- 【精】C语言之变量存储类型
- iOS开发系列--C语言之存储方式和作用域
概述 基本上每种语言都要讨论这个话题,C语言也不例外,因为只有你完全了解每个变量或函数存储方式.作用范围和销毁时间才可能正确的使用这门语言.今天将着重介绍C语言中变量作用范围.存储方式.生命周期.作用 ...
- C++中的数据存储方式自动存储、静态存储和动态存储
C++中变量存储方式有三种,自动存储,静态存储,动态存储 自动存储简单意义上就是在函数内不用任何关键字直接定义的变量,它在函数被调用时被创建,在函数退出时自动消失, 静态存储顾名思义就是在程序的整个运 ...
- C语言变量、函数的作用域及变量的存储方式
一.变量的作用域和存储方式 在C语言中每个变量都有两种基本属性:数据类型.数据的存储类别. 数据类型很多人都已熟知,例如:字符型(char).整型(int).浮点型(float)等等.存储类别是指数据 ...
- C语言中变量的存储类型
在C语言中,对变量的存储类型说明有以下四种: auto 自动变量register 寄存器变量extern 外部变量static 静态变量 自动变量和寄存器变量属于动态存储方式,外部变量和静态变 ...
随机推荐
- 概率dp 148 D
概率dp 设 f(i,j)f(i,j) 表示有 ii 只白鼠,jj 只黑鼠时A先手胜的概率 初始状态 全白时,显然先手必胜 有一只黑鼠时,先手若抽到黑鼠则后手必胜,所以先手首回合必须抽到白鼠 f(i, ...
- wix在使用heat自动生成wxs时添加windows服务组件
最近需要给安装包增加一个windows服务组件,按照我的理解,我以为只需要Product.wxs加一段如下的标签就可以了 <Componet Id="myservice"&g ...
- JEECG右上角用户信息完整显示
最近在使用JEECG框架,发现一个问题,就是右上角的用户信息显示不完整(如下图所示),现在想把完整信息显示出来 首先想到的是overflow样式问题,想通过修改样式显示完整信息,通过各种删除修改也没有 ...
- react脚手架和深入理解jsx语法
react的mvc和vue的mvvm vue的mvvm属于双向绑定,view层,model数据层,vm实现双向绑定的控制层 此种模式,再某一类项目种很有优势:管理系统 ( OA, ERP , CRM ...
- C++ explicit的作用
explicit作用: 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. explicit使用注意事项: * e ...
- static关键字 weak关键字
1.static关键字 static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart){ ...} 在函数前面加了一个stati ...
- ES6-三点运算符
首先理解一下函数总的arguments变量,这个变量是函数内部自动生成的,他用来保存传入函数的实参,是一个伪数组. 例: function fun(a,b){ console.log(argument ...
- python+树莓派实现IoT(物联网)数据上传到服务器
环境:raspbian-stretch(2018-06-27) 树莓派:3代B型 1.树莓派设备,需要在野外也能拥有独立联网能力,那必不可少的需要使用物联网模块. 这里使用的是微雪的SIM868通讯模 ...
- Spring bean的bean的三种实例化方式
Bean 定义 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象.这些 bean ...
- Android学习06
从开始学习Android,已经第5天,今天我换了一种方式,去观望了观望别人以及大佬的博客园,今天来做一下对比和反思,以便为后期的努力方向做好更充足的准备.在这里不得不佩服一下大佬们的学习能力和自我控制 ...