栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言关键字(1)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言关键字(1)

文章目录
  • 前言
  • 一、定义与声明
    • 1.什么是变量?
    • 2.如何定义变量(怎么用)
    • 3.为什么要定义变量(为什么)
    • 4.变量定义的本质
  • 二、变量
    • 1.变量的分类
    • 2.变量的作用域
    • 3.变量的生命周期
  • 四、auto 相关
  • 五、register关键字
    • 1.寄存器的认识
    • 2.寄存器存在的本质
    • 3.register 修饰变量
  • 总结


前言

C语言一共有32个关键字如下:


一、定义与声明

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

1.什么是变量?

在内存中开辟特定大小的空间,用来保存数据
关键字:内存

2.如何定义变量(怎么用)
	int x = 10;
	char c = 'a';
	double d = 3.14; 
  //类型 变量名 = 默认值
3.为什么要定义变量(为什么)

//理解链 计算机是为了解决人计算能力不足的问题而诞生的。即,计算机是为了进行计算的。 而计算,就需要数据。 而要计算,任何一个时刻,不是所有的数据都要立马被计算。
如同:要吃饭,不是所有的饭菜都要立马被你吃掉。饭要一口一口吃,那么你还没有吃到的饭菜,就需要暂时放在盘子里。 这里的盘子,就如同变量,饭菜如同变量里面的数据。
换句话说,为何需要变量?因为有数据需要暂时被保存起来,等待后续处理。
那么,为什么吃饭要盘子?我想吃一口菜了,直接去锅里找不行吗?当然行,但是效率低。 因为我们吃饭的地方,和做饭的地方,是比较"远"的。

4.变量定义的本质

我们现在已知: 1. 程序运行,需要加载到内存中
2. 程序计算,需要使用变量

那么,定义变量的本质:在内存中开辟一块空间,用来保存数据。(为何一定是内存:因为定义变量,也是程序逻辑的一部 分,程序已经被加载到内存)

二、变量

这个关键字书上讲的比较浅,提了一下就过去了,接下来我给大家详细讲解

1.变量的分类

局部变量:包含在代码块中的变量叫做局部变量。
局部变量具有临时性。进入代码块,自动形成局部变量,退出代码块自动 释放。
[网上很多说函数中的变量是局部变量,不能说错,但说法是不准确的]
全局变量:在所有函数外定义的变量,叫做全局变量。全局变量具有全局性。
代码块:用{}括起来的区域,就叫做代码块

//demo #include  
#include  
	int g_x = 100; //全局变量 
int main()
 { 
     int x = 10; //局部变量,main函数也是函数,也有代码块{} 
	 printf("x:%dn", x); 
	 return 0; 
 }
2.变量的作用域

作用域概念:指的是该变量的可以被正常访问的代码区域

#include  
#include  
int main() 
{ 
	int x = 10; 
	if (x == 10){ 
	int y = 20; 
	printf("局部: x: %d, y: %dn", x, y);//y只能在本代码块内有效 
	}
	printf("局部: x: %d, y: %dn", x, y); //报错,y不能被访问 
	return 0; 
}

局部变量:只在本代码块内有效
//例子同上
全局变量:整个程序运行期间,都有效

//demo 1 
#include  
#include  
int g_x = 100; //全局变量 
void show() { 
		printf("show: 全局: %dn", g_x); //在任何代码块中都可以被访问
 }
 int main() 
 { 
	 show(); 
	 printf("main: 全局: %dn", g_x); //在任何代码块中都可以被访问,甚至被修改  
	 return 0; 
 }
 //demo 2 
 #include  
 #include  
 int g_x = 100; //全局变量 
 int main() { 
	 int g_x = 10; //局部变量,与全局同名
	 printf("g_x:%dn", g_x); //输出的是局部,也就是局部和全部同名的时候,优先局部。所以,强烈不建议这样干。
	  return 0; 
  }
3.变量的生命周期

生命周期概念:指的是该变量从定义到被释放的时间范围,所谓的释放,指的是曾经开辟的空间”被释放“
局部变量: 进入代码块,形成局部变量[开辟空间],退出代码块,"释放"局部变量
全局变量: 定义完成之后,程序运行的整个生命周期内,该变量一直都有效
//通过上面的例子,我们能感知一二,不过真正说清楚,需要等函数讲完,在谈一下。
//尽管,上面理解也没问题。

四、auto 相关

如何使用:一般在代码块中定义的变量,即局部变量,默认都是auto修饰的,不过一般省略
默认的所有变量都是auto吗?不是,一般用来修饰局部变量
后面我们所到的,局部变量,自动变量,临时变量,都是一回事。我们统称局部变量

#include  
#include 
int tmp=0;
int main()
{ 
	for (int i = 0; i < 10; i++)
	{
		printf("i=%dn", i);
		if(1) { 
		auto int j = 0; //自动变量 
		printf("before: j=%dn", j); 
		j += 1; 
		printf("after : j=%dn", j); 
	} 
	}
	return 0;
	}

思考:i用auto修饰可以吗?去掉j的auto可以吗?
都是可以修饰的
但是这个tmp不可以,因为auto只修饰局部变量
结论:已经很老,基本永不使用。

五、register关键字

其实,CPU主要是负责进行计算的硬件单元,但是为了方便运算,一般第一步需要先把数据从内存读取到CPU内,那么也就需要CPU具有一定的数据临时存储能力。注意:CPU并不是当前要计算了,才把特定数据读到CPU里面,那样太慢了。
所以现代CPU内,都集成了一组叫做寄存器的硬件,用来做临时数据的保存。

距离CPU越近的存储硬件,速度越快。

1.寄存器的认识

当前各位伙伴可以不关系硬件细节,只要知道CPU内集成了一组存储硬件即可,这组硬件叫做寄存器。

2.寄存器存在的本质

在硬件层面上,提高计算机的运算效率。因为不需要从内存里读取数据啦。

3.register 修饰变量

尽量将所修饰变量,放入CPU寄存区中,从而达到提高效率的目的

那么什么样的变量,可以采用register呢?

  1. 局部的(全局会导致CPU寄存器被长时间占用)
  2. 不会被写入的(写入就需要写回内存,后续还要读取检测的话,register的意义在哪呢?)
  3. 高频被读取的(提高效率所在)
  4. 如果要使用,请不要大量使用,因为寄存器数量有限

这里除了上面的,再有一点,就是register修饰的变量,不能取地址(因为已经放在寄存区中了嘛,地址是内存相关的概念)

#include 
int main() { 
	register int a = 0; 
	printf("&a = %pn", &a); //编译器报错:错误 1 error C2103: 寄存器变量上的“&” 
	//注意,这里不是所有的编译器都报错,目前我们的vs是报错的。 
	return 0; 
}

我的意见:该关键字,不用管,因为现在的编译器,已经很智能了,能够进行比人更好的代码优化。 早期编译器需要人为指定register,来进行手动优化,现在不需要了

总结

今天更细致讲了变量的内容和函数的声明和定义,还讲了两个关键字auto和register关键字,接下来剩余的关键字我们会慢慢往下讲解,尽情期待吧!!
希望大家三连支持哦!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/857141.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号