文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言关键字auto register怎么使用

2023-06-26 06:55

关注

这篇文章主要介绍“C语言关键字auto register怎么使用”,在日常操作中,相信很多人在C语言关键字auto register怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言关键字auto register怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一:auto

在学习关键字auto之前我们需要先了解两个概念:作用域和生命周期。

作用域

作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用

的 而限定这个名字的可用性的代码范围就是这个名字的作用域。

局部变量的作用域:作用范围包含在代码块中的变量。在哪儿内定义,只在其范围内有效。

全局变量的作用域:在所有函数外定义的变量。整个项目中都有效。

我们用简单代码来理解一下:

int a = 20;int main(){if (1){int b = 10;printf("%d", b);}return 0;}

这段代码中我们可以看到我们创建了两个变量,一个是全局变量 a ;一个是局部变量 b 。

根据作用域的定义我们可以知道:

全局变量a的作用域是整个工程:

C语言关键字auto register怎么使用

 局部变量b 的作用域只是包含在if括号内部:

C语言关键字auto register怎么使用

 为了我们更好的理解这个代码我们写几种代码,加深理解:

int a = 20;int main(){if (1){int b = 10;}printf("%d", a);printf("%d", b);return 0;}

这段代码我们发现报错

C语言关键字auto register怎么使用

 虽然我们b创建了,但是b是一个局部变量,作用域只在代码块内部( if 括号内部 ),不包括printf这一行,因此程序报错,访问不到b。

特殊的:

当局部变量和全局变量发生冲突时,局部变量优先。

这句话的意思是:当定义的变量名相同时,局部变量优先

int a = 20;int main(){a = 10;printf("%d", a);return 0;}

我们打印就可发现:

C语言关键字auto register怎么使用

 当全局变量和局部变量发生冲突时,局部变量优先。为了避免这种问题的出现,尽量不要使用相同的变量名定义。

生命周期

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

局部变量的生命周期是:进入局部变量所在范围开始 ----> 出了局部变量的范围结束

全局变量的生命周期是:整个程序的生命周期。生命周期main函数进入--->结束 整个程序的生命周期

为了更方便的理解:我们可以通俗的理解为,一个变量的存活时间,就是这个变量的生命周期。

例:古代某一皇帝从出生-->驾崩。从出生到驾崩这一段时间就是这位皇帝的生命周期。

// ***************生命周期***********//int  g = 100;//全局变量的生命周期://   //生命周期main函数进入--->结束 整个程序的生命周期//int main(){//{  // 局部变量生命周期://   //进入局部变量所在范围开始 ----> 出了局部变量的范围结束//int a = 100;//printf("%d\n", a);//}//////return 0;//}

auto

auto号称是最宽宏大量的关键字

auto的使用:一般在代码块中定义的变量,局部变量,默认都是auto修饰的。只在本代码块中使用 auto可省略。

用代码解释就是:

auto int g_val = 100;int main(){for (auto int i = 0; i < 10; i++){printf("i = %d\n", i);if (1){auto int j = 1;printf("before: %d\n", j);j++;printf("after: %d\n", j);}}return 0;}

由于auto只可修饰局部变量

因此第一句auto int g_val = 100;是错误的

C语言关键字auto register怎么使用

在之后的代码内部的全局变量中,auto所修饰的局部变量中的auto都是可以省略的,因此我们也说auto是最古老的关键字,我们在平时的编程中也可省略auto。

二:register

register -- 寄存器   ----最快的关键字

我们首先要了解存储等级

C语言关键字auto register怎么使用

离CPU越近的存储单元,效率越高,成本单价越高。

离CPU越远的存储单元,效率越低,成本单价越低。

对于任意一种硬件而言,上游硬件都是下游硬件的缓存,因此我们可以说寄存器是下游存储设备的缓存。

寄存器的本质:本质是在硬件层面上,提高计算机的运算效率。

什么变量可以用register

局部变量(全局变量导致CPU寄存器被长时间占用)

不会被写入(写入就要写回内存,要重新加载,无意义)

被高频使用(提高效率所在,放在寄存器,不用访存读取,提高效率)

int main(){register int val = 100;//寄存器变量没有地址,不能取地址val = 200; //可以被写入printf("%d\n", val);// 在gcc编译器下 也不允许取地址return 0;}

提示:不要大量使用register,因为寄存器的数量有限。

由于使用register关键字,直接将val存在寄存器内,因此val没有内存地址,因此不能进行取地址操作。

到此,关于“C语言关键字auto register怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯