从C出发 22 --- 变量的作用域与生命期

news2024/10/4 5:26:54

问题 1 : 这样子定义一个不属于任何函数的变量正确吗?

问题 2 :   编译能通过吗?

问题 :  我们要打印的var 到底是 10 还是 100.

 

 

 

 

 总结:

 

 

 

 


 

 

什么都不会输出,因为这里的 i++ ;是让局部变量的 i ++,程序会一直死循环  

 

 

为什么都是 11,为什么没有持续的累积呐? 


 

 函数参数和和局部变量本质是一样的为什么? 

因为他们都是存放在栈空间当中的,从内存的角度来看,他们是同一块内存区域里面的变量

 

分析下面程序中变量的生命期

int var = 1;    //生命期最长,(程序开始运行的时候它被创建出来,程序结束的时候它才被销毁)全局变量和静态变量生命期最长

void func()
{
    printf("var = %d\n" , var);
}

int main()
{
    int var = 2;
    int i = 0;     //这 2 个局部变量的生命期等同于main函数的运行期,换句话来说main 被调用的时候他们被创建,main 函数返回的时候他们销毁

    for(i=0;i<5;i++)
    {

        int var = 4;  //它的生命期只是一次循环的时间  换句话来说这里被创建出来
        var += i;

        printf("var = %d\n",var);
    }   //在这里被销毁

    func();

    printf("var = %d\n", var);
    
    return 0;  //main 函数运行到这里的时候就被返回了

}

 

这里的空间指的就是代码段,在哪个代码段可以访问,在哪个代码段不能访问

生命期是从时间的角度上来访问一个变量是否可以访问,对于函数中的局部变量,当调用了这个函数他们才是可访问才是合法的 ,函数执行返回后这些局部变量就被销毁,不可再访问了

 

#include <stdio.h>

int func(int x)
{
    static int a_var;   //作用域并没有因为static 的修饰而改变 ,从这里开始  || 生命期因为 static  而延长了,是整个程序的运行期
    s_var += x;

    return s_var;     //作用域到这里结束
}

int main()
{
    int i =0;    //定义了一个普通的局部变量,普通的局部变量生命期是多久? 就是从这个函数调用开始,

    printf("Begin\n");

    for(i=1; i<=5;i++)
        printf("s_var = %d\n", func(i));

    printf("End\n");

    printf("s_var = %d\n", func(0));

    return 0;  //到这个函数的执行返回

}

 

#include <stdio.h>

int global;  //只要是全局数据区中的变量,都会默认的初始化为0

int func(int x)
{
    static int a_var;  //全局数据区中的变量,默认初始化为0
                        //并且只做一次初始化

    s_var += x;

    return s_var;

}

int main()
{

    int i = 0;

    for()
    {

    }

    printf("var = %d\n",func(0));



}


 

我们平时创建的普通变量等价    

int i = 0;  等价于 使用了  auto关键字      auto int i =0;

寄存器 :  是处理器里面的存储单元,是确实的用来存储数据的,但是寄存器的数量很有限,想将变量放在寄存器里面就一定能成功吗?

变量 j 默认是一个自动变量,存储在栈空间 ,所以前面写不写 auto 无所谓

用 register 修饰 j ,大概率不成功


 

static 用来修饰这个全局变量有什么意义呐?

意义是将 g_sVar 变成了一个文件存储变量,只有在当前定义它的文件当中才能够访问

auto 和 register 不能修饰全局变量 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在构建个人想法时,使用哪个工具更好呢?Tana, AmpleNote 和 妙记多 Mojidoc的比较

笔记类 App 都很强调个人化&#xff0c;因为我们每个人会用不同的方法来做笔记、写日记。不过有一些框架可以帮助我们&#xff0c;比如子弹笔记&#xff08;Bullet Journal&#xff09;等。 Tana 和 Amplenote 都可以使用「标签」&#xff0c;尽管它们处理的方式、体验都大不相…

4.14~4.16学习总结

多线程&#xff1a; 同步代码块 格式&#xff1a;Synchronized(锁) { 操作共享数据的代码 } 特点1&#xff1a;锁默认打开&#xff0c;有一个线程进去了&#xff0c;锁自动关闭。 特点2&#xff1a;里面的代码全部执行完毕&#xff0c;线程处理&#xff0c;锁自动打开。 …

SaleSmartly(ss客服)怎么玩转Instagram自动化?

这段时间接触了不少粉丝&#xff0c;一直在说ins营销&#xff0c;说谁谁谁通过这个引流&#xff0c;结果爆了&#xff0c;那我们今天就来简单说一下。Instagram (IG) 是全球最大的照片和视频共享平台&#xff0c;拥有超过10亿的月活跃用户和 5 亿的日活跃Story用户。借助IG的强…

LNMP和论坛的搭建

系列文章目录 文章目录系列文章目录一、LNMP搭建1.承接上文搭建nginx服务2.Mysql数据库搭建3.安装配置 PHP 解析环境4.、部署 Discuz&#xff01;社区论坛 Web 应用总结一、LNMP搭建 1.承接上文搭建nginx服务 2.Mysql数据库搭建 1、安装Mysql环境依赖包 yum -y install \ n…

不限量免注册,极速体验AI助手

最近 ChatGPT 很火&#xff0c;火到每个人都想玩一把&#xff0c;由于受限&#xff0c;不是在搭梯子就是在搭梯子的路上&#xff0c;现在类 ChatGPT 产品&#xff0c;它终于来了。还是先简单秀一波操作&#xff1a;第一波&#xff1a;大数据记录中&#xff0c;涉及关键字快速检…

vue2路由(上)

路由的简介 什么是路由&#xff1f; 用生活上的例子&#xff0c;路由器上的接口对应一个主机。 而由key和values组成的映射关系就是路由 主要用于SPA单页面应用 就是根据你端口号后面的路径&#xff0c;看你有没有配置这个页面对应的组件&#xff0c;如果有&#xff0c;那么就…

批处理脚本用法总结

目录一、常用命令二、基本语法1. rem 和 ::2. echo 和 3. pause4. errorlevel5. title6. color7. goto 和 :三、常见用法1. 设置临时环境变量2. 启动CMD执行命令3. 打开环境变量窗口参考资料&#xff1a;批处理(Batch)&#xff0c;也称为批处理脚本。顾名思义&#xff0c;批处理…

零入门kubernetes网络实战-29->在同一个宿主机上基于虚拟网桥bridge链接不同网段的不同网络命名空间的通信方案

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 上一篇文章&#xff0c;我们分享了使用虚拟网桥来连接同网段的不同网络命名空间下的通信情况。 那么&#xff0c;本篇文章&#xff0c; 我们想测试一下&…

用ChatGPT快速阅读论文:3个步骤让你轻松阅读论文文档

引言 您是否曾经因为阅读论文而感到困难和无从下手&#xff1f;ChatDOC是一款专为您设计的人工智能工具&#xff0c;帮助您快速理解论文内容。通过上传文档&#xff0c;利用ChatGPT技术&#xff0c;您只需3个简单步骤&#xff0c;即可快速阅读论文&#xff0c;提高阅读效率。立…

[架构之路-162]-《软考-系统分析师》-3-作系统基本原理-进程管理

目录 前言&#xff1a; 3 . 1 操作系统概述 3.1.1 操作系统的类型 2 . 批处理系统 3 . 分时操作系统 4 . 网络操作系统 5 . 分布式操作系统 6 . 嵌入式操作系统 3.1.2 操作系统的软件结构 1 . 整体结构 2 . 层次结构 3 . 客户/服务器结构 4 . 面向对象结构 3 . 2…

一文总结 Shiro 实战教程

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

InstructGLM:基于ChatGLM-6B在指令数据集上进行微调

InstructGLM 基于ChatGLM-6BLoRA在指令数据集上进行微调 https://github.com/yanqiangmiffy/InstructGLM 本项目主要内容&#xff1a; &#x1f680; 2023/4/9 发布了基于100万条由BELLE项目生成的中文指令数据的Lora权重&#xff0c;具体可见output/belle/chatglm-lora.pt&a…

【Spring Boot】SpringBoot设计了哪些可拓展的机制?

文章目录前言SpringBoot核心源码拓展Initializer拓展监听器ApplicationListenerBeanFactory的后置处理器 & Bean的后置处理器AOP其他的拓展点前言 当我们引入注册中心的依赖&#xff0c;比如nacos的时候&#xff0c;当我们启动springboot&#xff0c;这个服务就会根据配置文…

【UE Sequencer系列】05-解决角色动画造成的位移问题

步骤 在上一篇博客制作的动画中&#xff0c;角色反击的动画部分会造成角色瞬移的问题&#xff0c;如下所示&#xff1a; 为了解决这个问题&#xff0c;我们可以做如下操作&#xff1a; 1.首先我的瞬移现象发生在第698帧到699帧的时候&#xff0c;我对第698帧的角色的transfor…

小朋友台灯什么品牌好?盘点儿童护眼台灯排行榜

小朋友自晚上学习时&#xff0c;有台灯肯定比没有台灯好&#xff0c;只要是合格的、能用的台灯&#xff0c;能有一个稳定又亮堂的环境&#xff0c;也不会给眼睛带来伤害。 这几年在台灯品类中出现“护眼灯”&#xff0c;主打是预防或缓解眼疲劳的&#xff0c;在普通台灯的基础是…

电子模块|外控集成 LED 光源 WS2812模块---硬件介绍

电子模块|外控集成 LED 光源 WS2812模块模块简介模块特点机械尺寸模块简介 WS2812是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同&#xff0c;每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路&#xff…

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的直方图算法增强(C#)

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的直方图算法增强&#xff08;C#&#xff09;Baumer工业相机Baumer工业相机使用图像算法增加图像的技术背景Baumer工业相机通过BGAPI SDK联合OpenCV使用图像增强算法1.引用合适的类文件2.BGAPI SDK在图像回调中…

如何能基于prompt tuning v2训练好一个垂直领域的chatglm-6b

如何能基于prompt tuning v2训练好一个垂直领域的chatglm-6b 首先先抛出一个问题&#xff0c;是不是所有的文本生成数据集都适合用chatglm 6B的模型进行微调。那我们今天找到了三个数据集&#xff0c;分别为百科数据集、法律问答数据集、论文题目与摘要数据集、专利名称与专利…

stable-diffusion-webui-colab部署记录

stable-diffusion-webui-colab 该模型可以在网上云端部署stable-diffusion&#xff0c;减少本地部署的繁琐步骤降低配置要求的依赖。 一、进入stable-diffusion-webui-colab 1.网址&#xff1a;https://github.com/camenduru/stable-diffusion-webui-colab 在分支中选择driv…

java 坐标体系与绘图

目录 一、坐标体系 1.像素 : 2.坐标系 : 二、绘图 1.机制 : 2.实例 : 3.原理 : 4.常用绘图方法 : 1 setColor(Color c) : 设置画笔颜色 2 drawLine(int x1, int y1, int x2, int y2) : 画直线 3 drawRect(int x, int y, int width, int height) : 画矩形边框 4 fillRec…