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 静态变量 自动变量和寄存器变量属于动态存储方式,外部变量和静态变 ...
随机推荐
- Git - 后续
1. 概述 现在讲了这些, 也就能应付一下日常的单机操作 后续大概会讲这些内容 分之间的 merge 本地仓库与远程仓库的互动
- 每天进步一点点------YUV格式详细解释
YUV格式详细解释 YUV开放分类: 网络.计算机.手机.色彩学.影像学 概述 YUV(亦称YCrCb)是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式 ...
- web项目获取路径
Java获取路径的各种方法: (1).request.getRealPath("/"); //不推荐使用获取工程的根路径 (2).request.getRealPath(requ ...
- Java 前加加和后加加 总结
public class Test { public static void main(String[] args) { int age = 6; //先自加,再使用(age先自加1,然后再打印age ...
- python 处理form/data文件上传
处理multipart/form-data 的java serverlet请求接口通过python实现 记住不要在头加:"Content-Type":"multipart ...
- HDU-1702-ACboy needs your help again!(Stack)
队列和栈的判空都可以用empty #include <bits/stdc++.h> using namespace std; string oper,stru; int T,M,num; ...
- echart 重新加载
myechart2.clear(); myechart2.setOption(options[1]);
- 类型不匹配 java.lang.IllegalArgumentException : argument type mismatch
异常: 解决: money的类型是 float类型(把0.8改成 0.8f 即可)
- 《JavaScript高级程序设计》读书笔记(三)基本概念第四小节 操作符
内容---语法 上一小节---数据类型 本小节 操作符---流程控制语句---理解函数 操作符--操作数据值的操作符--算术(如加减).位操作符.关系.相等--ECMAScript操作符可以适用于很多 ...
- Ajax请求状态200,却走error的函数
已经将近一个月没有正式使用Ajax的请求代码了,参加工作后,这是第一次使用,感觉有些生疏,但基本代码还是记得的,写起来也不费劲,但正因为如此,问题就来了,由于经验不足,本来导致问题的原因不是那个,我却 ...