【C语言你真的学会了吗】C语言深度剖析(1)【关键字深度剖析】
目标:
- 初步了解关键字分类
- 深刻理解变量
- 深刻理解定义与声明
- auto关键字的理解
- 站在存储结构角度,理解register关键字
目录
1.关键字分类
2.第一个C程序(补充内容)
3.变量的定义和声明
3.1 什么是变量
3.2 怎么定义变量
3.3 为什么要定义变量
3.4 变量定义与声明的差别
4.最宽宏大量的关键字---auto关键字
4.1 变量的分类
4.2 变量的作用域
4.3 变量的生命周期
4.4 作用域VS生命周期
4.5 auto相关
5. 最快的关键字-register
5.1存储金字塔
5.3 寄存器存在的本质
5.4 register修饰变量
1.关键字分类
关键字 | 说明 |
auto | 声明自动变量 |
short | 声明短整形变量或函数 |
int | 声明整形变量或函数 |
long | 声明长整型常量或函数 |
float | 声明浮点型变量或函数 |
double | 声明双精度变量或函数 |
char | 声明字符型变量或函数 |
struct | 声明结构体变量或函数 |
union | 声明共享数据类型 |
enum | 声明枚举类型 |
typedef | 用以给数据类型起别名 |
const | 声明只读变量 |
unsigined | 声明无符号变量或函数 |
signed | 声明符号变量或函数 |
extern | 声明变量是在其他文件中声明 |
register | 声明寄存器变量 |
static | 声明静态变量 |
volatile | 说明变量在程序执行中可被隐含地改变 |
void | 声明函数无返回值或无参数,声明无类型指针 |
if | 条件语句 |
else | 条件语句否定分支(与if连用) |
switch | 用于开关语句 |
case | 开关语句分支 |
for | 一种循环语句 |
do | 循环语句的循环体 |
while | 循环语句的循环条件 |
goto | 无条件跳转 |
continue | 结束当前循环,开始下一轮循环 |
break | 跳出当前循环 |
default | 开关语句中的 ‘其他’ 分支 |
sizeof | 计算数据类型长度 |
return |
子程序返回语句(可以带参数,也可以不带参数)循环条件 |
2.第一个C程序(补充内容)
#include<stdio.h>
#include<Windows.h>
/*在编译的时候,把文本代码 --> 可执行程序(二进制文件)->windows下双击可以执行文件*/
//编译执行 就会生成解决方案,清理解决方案 生成的那些文件就没了
int main()
{printf("hello world\n");system("pause");//如果用VS2013 不会自动停屏,需要用system防止程序一闪而过return 0;}
扩充知识:
1.我们写出来的代码是文本代码,而点击编译执行的时候,编译器会把文本代码转化为二进制文件
也就是.exe(可执行程序),而要找到这个文件,只需要打开当前文件夹下的Debug文件夹
如图:
而双击.exe就会运行刚才我们所写的代码:
如果点击清理解决方案,那么观察文件夹 发现什么都没了!
2.
- Windows当中,双击程序本质就是运行程序。那么运行程序的本质又是什么呢?
运行程序的本质就是将程序加载到内存当中
- 任何程序在运行之前都必须要先加载到内存当中
夺命二连问:
① 为什么程序在运行之前必须先加载到内存当中?
CPU和内存交互比较快,与硬盘交互慢--- 快!
(冯诺依曼硬件体系结构规定的必须先加载到内存中)
② 程序在被加载到内存之前,他在哪?
程序没有被加载的时候,在硬盘当中
这里需要用画图说明一下:
冯诺依曼体系结构:
3.变量的定义和声明
3.1 什么是变量
变量就是在内存中开辟特定大小的空间,用来保存数据
所有的变量,本质都是在内存中的某个位置开辟空间的!
那么变量可以在硬盘中开辟吗?
不可以!因为变量是程序运行的时候进行开辟的,而程序运行的时候,已经被加载到内存中了
所以变量一定是在内存中的!
而为什么是某个位置,因为我们是不知道的,是由操作系统随机分配的一个位置
3.2 怎么定义变量
- 定义变量的时候初始化
char c='a';
double d=3.14;
这种定义方式是开辟空间的时候,所开辟的空间的里直接放入内容(变量与生俱来的)
- 定义好变量,然后再赋值
char c;
c='d';
这种定义方式是先开辟号一个空间 也就是变量c
然后 把d放到已经存在的空间里面
这两种定义方式没有本质的区别,这里只有在C语言的结构体部分才会有一些明显差别
3.3 为什么要定义变量
首先我们要知道,计算机是为了解决人类计算能力不足而产生的,也就是计算机是为了
进行计算的。
而计算就需要数据,但是计算过程中并不是所有的数据都立马需要被计算,有一些数据是需要先保存起来等待后续的处理的,所以利用变量是为了暂时保存数据
硬盘中的数据被加载到内存当中之后,是一次加载了很多数据,但是CPU一次只会处理一个数据!所以没有被CPU处理的数据就需要暂时存储起来,以便后续的处理
3.4 变量定义与声明的差别
定义:开辟空间
声明:更多的是一种告知,告知编译器某个变量是已经被定义好的,不用考虑它是不是没有被定义,等到后面链接的时候,把所有内容和我的变量关联起来就好了
注意:
- 定义只能有一次 (只能开辟一次空间)
- 声明可以有多次
举个例子:表白只能表白一次,表白成功之后,你可以给多个人声明一下这是我的女朋友
【C语言你真的学会了吗】C语言深度剖析(1)【关键字深度剖析】相关推荐
- 人工智能用python还是java_学会java和python语言,可以开始搞人工智能吗?
作为一名软件开发工程师,个人认为,当你学会Java和Phthon语言使用后,不建议你直接上手人工智能.下面我来说一下个人看法: 人工智能领域门槛较高 人工智能对于一般同学而言,其入门门槛相对较高,你虽 ...
- 《十天学会单片机和C语言编程》
<十天学会单片机和C语言编程> 大家注意了这个文件只有最新版迅雷可以下载,下面的lesson几就是第几课.点击右键使用迅雷下载. ed2k://|file|[十天学会单片机和C语言编程]. ...
- 自学python能学成吗-没有任何编程基础可以直接学习python语言吗?学会后能够做什么?...
很明确的说 python非常适合没有任何编程基础的人入门.. 目前应用最多的:全栈开发.数据分析.运维开发,今天我们就以这三个重点的岗位来做一下自学Python的规划,希望你在学之前就能有结果的来走得 ...
- c语言程序设计需要学多久,九江c语言编程学习,九江学c语言编程报班,九江学c语言编程一般要多久才能学会...
九江c语言编程学习,九江学c语言编程报班,九江学c语言编程一般要多久才能学会 首页 > C语言 > 九江c语言编程学习 作者:镀金池 发布时间:2017-10-18 14:11 据ID ...
- c语言编程学多久,丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会...
丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会 首页 > 软件 > 丰城c语言编程学习 作者:镀金池 发布时间:2018-04-09 16:40 在之后 ...
- vector之resize剖析-曾经的我以为自己真的学会了vector
vector之resize剖析 零.前言 一.先看下面一段代码 二.测试结果 三.测试代码 零.前言 曾经的我以为自己真的学会了vector!人的认知有限,就以为自己什么都会了.当你深入研究一下时,才 ...
- python真的那么火吗-Python语言为什么这么火?
Python现在已经成为一种非常常见的语言,特别是在当今的数据科学中,由于其易于读写,它越来越受到程序员的追捧.从市场的整体需求来看,对Python人才的需求逐年增加,人气也在逐步上升.那么Pytho ...
- 一小时过c语言,一小时学会C语言.docx
PAGE \* MERGEFORMAT 14 C语言程序设计 第一课.认识C语言 C语言的特点 C语言是美国的Dennis Ritchie在1972年设计发明的.它由早期的编程语言BCPL(B语言)发 ...
- 超简单且免费体验的手机短信验证,三分钟学会(包含c语言、c++、python、java、php等语言)
文章目录 简介. 一.短信平台 二.步骤 1.注册一个账号 2.下载接口文档 3.互亿在Java中的短信验证 总结 简介. 鄙人用的是Java,其他语言也可以用如:c语言.c++.python.jav ...
最新文章
- 深入理解JVM之二:垃圾收集器概述
- linux切换软件版本,Linux中dpkg工具update-alternatives实现符号链接软件版本的切换(转)...
- 用Javascript实现面向对象编程(封装,抽象,继承,多态)
- jsp调试,异常行数不匹配
- javascript 数组过滤重复对象
- UIAlertView 弹框
- 构建根文件系统_Linux之构建文件系统
- Rust : Tonic 基于Rust的gRPC实现
- diskgenius扩容c盘重启电脑卡住_用diskgenius更改分区参数的终止柱面,扩大C盘空间后...
- swing宾馆客房管理系统(文档)
- 【Love2d从青铜到王者】第十篇:Love2d之类和类的继承(Classes And Inheritance)
- 时间换算 将毫秒换算成时间
- matlab 理论力学,MATLAB理论力学/高等学校教材
- 分布电容和杂散电容_寄生电容与分布电容的区别
- html style属性的用法
- 苹果史上8款最失败产品
- Mysql出现问题:ERROR 2058: Plugin caching_sha2_passward could not be loaded解决方案
- RPG游戏-任务系统
- 牢记卖股票的四大纪律十项注意
- GUI(Graphical User Interface)—关于一道题的按钮事件处理知识点总结
热门文章
- 【离散数学】二元关系中的传递关系与非传递关系
- 广联达产品经理笔试题目
- “../28004x_generic_ram_lnk.cmd“,遇到RAM内存不够,需重新配置。
- 对象转SortedMap,字段按照首字母排序
- Flutter 实体类转String,String转实体类
- Python tkinter 保姆级超简易登陆界面教学
- 工业4.0细谈MES制造执行系统
- 计算机考研380分能上什么学校,考研总分500考380难吗 能上什么学校
- simulink仿真之比较产生阶梯波
- 计算机网络自顶向下方法(第六版) 课后题答案 | 第五章