返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言关键字之autoregister详解
  • 618
分享到

C语言关键字之autoregister详解

2024-04-02 19:04:59 618人浏览 安东尼
摘要

目录一:auto作用域生命周期auto二:reGISter总结:一:auto 在学习关键字auto之前我们需要先了解两个概念:作用域和生命周期。 作用域 作用域(scope)是程序设

一:auto

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

作用域

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

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

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

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

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

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

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

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

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

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

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

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

这段代码我们发现报错

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

特殊的:

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

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

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

我们打印就可发现:

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

生命周期

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

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

全局变量的生命周期是:整个程序的生命周期。生命周期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;是错误的

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

二:register

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

我们首先要了解存储等级

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

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

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

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

什么变量可以用register

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

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

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

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

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

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

总结:

包括作用域,生命周期,auto和register关键字的理解是使用。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: C语言关键字之autoregister详解

本文链接: https://lsjlt.com/news/162660.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言关键字之autoregister详解
    目录一:auto作用域生命周期auto二:register总结:一:auto 在学习关键字auto之前我们需要先了解两个概念:作用域和生命周期。 作用域 作用域(scope)是程序设...
    99+
    2024-04-02
  • C语言学习之关键字的示例详解
    目录1. 前言2. 什么是关键字3. extern-声明外部符号4. auto-自动5. typedef-类型重定义(类型重命名)6. register-寄存器6.1 存储器6.2 ...
    99+
    2022-11-13
    C语言 关键字
  • 详解C语言中的Static关键字
    一、static关键字的基本含义 首先,static关键字的意思是静态的,用于修饰局部变量,全局变量和函数,修改其数据储存类型 1.局部变量:在任意一个函数内部定义的变量(不加sta...
    99+
    2024-04-02
  • c语言static关键字用法详解
    目录1.static修饰全局变量2.static修饰函数3.static修饰局部变量总结:1.static修饰全局变量 我们创建两个源文件,一个test.c,一个main.c 现在...
    99+
    2024-04-02
  • C语言入门篇--关键字static详解
    目录1.修饰局部变量1.1作用1.2举例(1)不加static(2)加static(3)静态局部变量的初始化只会进行一次2.修饰全局变量2.1作用2.2举例(1)不加static(2...
    99+
    2024-04-02
  • C 语言基础之C语言的常见关键字
    目录​1、auto 2、register 3、signed和unsigned 4、typedef 5、extern 6、拓展首先我们简单的和这些关键字见见面(被高亮的关键...
    99+
    2024-04-02
  • C语言Static 关键字解析
    目录01简述02static关键字作用01简述 static关键字在嵌入式C语言当中很简单,它有三个作用: 作用一:在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变...
    99+
    2024-04-02
  • C语言关键字(三)
    这篇文件继续讲解C语言关键字想问大家一个问题,什么是声明什么是定义?举个例子:A)int i;B)extern int i;(关于extern,后面解释)哪个是定义?哪个是声明?或者都是定义或者都是声明?什么是定义:所谓的定义就是(编译器)...
    99+
    2023-06-03
  • C语言关键字总结解析
    C语言关键字总结 1.关键字变更历史 1999年12月16日,ISO推出了C99标准,该标准新增了5个C语言关键字: inline restrict _Bool _Complex _...
    99+
    2024-04-02
  • 剖析C语言关键字之void,const,return
    目录returnvoid一.可做为函数的通用接口二.void不能修饰变量三.void修饰函数返回值const总结return 首先我们弄清楚c语言内存分配的方式 然后我们看一段代码...
    99+
    2024-04-02
  • C语言中go是关键字吗?详细解析
    标题:C语言中go是关键字吗?详细解析 在C语言中,"go"并不是一个关键字。C语言的关键字是由C标准规定的,用于表示特定的语法结构或者功能,在编译器中有特殊的含义,不能被用作标识符或...
    99+
    2024-04-02
  • C++关键字之likely和unlikely详解
    目录什么是likely和unlikelylikely/unlikely的原理likely/unlikely的适用条件C++20中的likely/unlikely什么是likely和u...
    99+
    2022-11-13
    C++ likely和unlikely C++ likely和unlikely
  • 全面了解C语言 static 关键字
    目录一,前言二、认识多文件1、多文件的创建2、为什么要有多文件3、为什么要有头文件4、多文件在代码中的具体体现三、最名不符实的关键字 - static1、static 修饰局部变量2...
    99+
    2024-04-02
  • C语言关键字auto与register及static专项详解
    目录1.auto2.register3.static1.auto 在解释 auto 之前,先来了解一下什么是局部变量。 在很多印象中,对局部变量的描述是:函数内定义的变量称为局部变量...
    99+
    2024-04-02
  • C语言 auto和register关键字
    目录一、关键字分类二、补充内容1、变量的分类2、变量的作用域与生命周期三、最宽宏大量的关键字 -- auto四、最快的关键字 -- register1、存储分级2、寄存器3、regi...
    99+
    2024-04-02
  • c语言关键字有多少
    今天小编给大家分享一下c语言关键字有多少的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。C语言的关键字共有32个,根据关键字的...
    99+
    2023-07-04
  • C语言中volatile关键字的详细介绍
    这篇文章主要讲解了“C语言中volatile关键字的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中volatile关键字的详细介绍”吧!1. 什么是volatile关键字?v...
    99+
    2023-06-20
  • C语言详解关键字sizeof与unsigned及signed的用法
    目录最冤枉的关键字sizeof理解被误解为函数sizeof(int)*p 表示什么意思signed与unsigned 关键字有符号整数vs无符号整数整形在内存的存储原码反码补码存储的...
    99+
    2024-04-02
  • C语言中的关键字总结
    本篇内容介绍了“C语言中的关键字总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.关键字变更历史1999年12月16日,ISO推出了C9...
    99+
    2023-06-20
  • C语言的关键字有哪些
    这篇“C语言的关键字有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言的关键字有哪些”文章吧。第一类:数据类型关键字...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作