IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言关键字(1) -> 正文阅读

[C++知识库]C语言关键字(1)


前言

C语言一共有32个关键字如下:
在这里插入图片描述


一、定义与声明

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

1.什么是变量?

在内存中开辟特定大小的空间,用来保存数据
关键字:内存
在这里插入图片描述

2.如何定义变量(怎么用)

	int x = 10char c = 'a';
	double d = 3.14; 
  //类型 变量名 = 默认值

3.为什么要定义变量(为什么)

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

4.变量定义的本质

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

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

二、变量

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

1.变量的分类

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

//demo #include <stdio.h> 
#include <windows.h> 
	int g_x = 100; //全局变量 
int main()
 { 
     int x = 10; //局部变量,main函数也是函数,也有代码块{} 
	 printf("x:%d\n", x); 
	 return 0; 
 }

2.变量的作用域

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

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

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

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

3.变量的生命周期

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

四、auto 相关

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

#include <stdio.h> 
#include <windows.h>
int tmp=0;
int main()
{ 
	for (int i = 0; i < 10; i++)
	{
		printf("i=%d\n", i);
		if(1) { 
		auto int j = 0; //自动变量 
		printf("before: j=%d\n", j); 
		j += 1; 
		printf("after : j=%d\n", 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 <stdio.h>
int main() { 
	register int a = 0; 
	printf("&a = %p\n", &a); //编译器报错:错误 1 error C2103: 寄存器变量上的“&” 
	//注意,这里不是所有的编译器都报错,目前我们的vs是报错的。 
	return 0; 
}

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

总结

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

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 10:59:30  更:2022-05-05 11:00:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 23:27:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码