写在一切之前:
首先需要说明的是,本系列文章面对的对象是和我一样的C语言初学者,作为初学者的文章难免会有各种各样的错误纰漏,如果有发现错误的地方麻烦您抽出宝贵的时间在文章下方指出,作者在看到后会进行及时的修改。
其次是系列文章的目的,作为一名接触编程世界一年的当代大学生,我发现我并没能在严格意义上具备任何实战能力。主要原因有两点:其一,被各种概念和不说人话给吓到了导致开始逃避深入学习或者只知道一样东西叫这个却不知道它究竟是什么;其二便是缺乏一个系统的学习,导致我学的东西跟掰碎的饼干屑一样,拿起来也能吃,但是就是没有整体吃下去的那种感觉了(哪块单看都差不多,但是一实战连起来就啥也不会了)
所以,当我把零零碎碎的东西扔掉,重新开始学习时,我决定用文章的形式把这些乱七八糟长相可怕的东西变成能听懂的人话,在我向外输出让其他和我有一样烦恼的人能理解这些的同时巩固自己的所学所想。
我有着写长文记录所思所想的习惯,所以我觉得如果把长文写作的习惯带入以后用来工作的知识上,也不失为一种奇妙的劳逸结合。
C语言系列是第一次尝试,至于未来会怎样,我就交给时间和阅读的你我了
我们现在开始。
1.C语言里的语言,它是什么?
学习C语言前,首先来说说什么是语言
当我们与彼此交流时,我们会使用不同的语言来确保彼此能理解彼此向表达的含义,汉语,英语,日语,法语等等语言是我们进行基础沟通的桥梁。
当我们与计算机进行交流时,计算机语言就是这样的一个东西
我们把计算机想象成一个外星人
你需要和他沟通来进行一些操作,但是他听不懂你的语言。所以就需要你学习计算机语言并用他能听懂的方式告诉他需要做什么,他再根据你说话的内容来反馈给你不同的结果,就是这个样子。
2.硬件+操作系统+驱动层+应用层=能用(大概)
当你购买一台电脑时,你会面对这些
首先,单看你的电脑,它就是两片连起来的金属,这个部分叫硬件
让电脑工作的前提是电脑需要有一个操作系统【如windows】
驱动层是连接硬件和操作系统用的
而你在操作系统上安装的QQ,微信,Epic,这些就是应用软件了,这块就是应用层
作为大多数用户来说,我购买一台电脑,从使用到报废,90%的时间关注点都在应用层上
那不咋关注的呢?
我们就统一叫做下层/底层
我们要谈的C语言是可以广泛用于底层的
3.C语言的标准
早期,一开始大伙是用二进制(因为计算机能识别二进制)来写
某些功能怎么实现,可能还要没事翻翻表格看看二进制哪个对应那个
后来大家发现说我是不是可以拿些符号来表示一段二进制代码(如ADD表示加法)
这样就可以省事一些,这就是助记符,以这个为基础大伙开始用汇编语言了
随后,在汇编语言的基础上B语言出现了,随后就是C语言
一个物件出现的时候肯定是不完整的,所以在c语言问世之初,大伙就开始对C语言进行定制,把C语言变成自己想要的形状
但是大家改完了,爽完了,发现了新的问题
“我们不互通了”,这样下去各路诸侯不就打起来了?
这好吗?这不好 。所以接下来C语言便出现了国际标准(ANSI C)进行统一
最早期由C语言之父进行指定的标准(K&R标准),k和r来自二位创始人的名字
后面C89,C90,C99这些陆续就出现了
目前来讲C99之后使用的就比较少了
4.那文件是怎么运行起来的
说到这里就会有些问题浮现出来了
我看到的那些后缀是 .c和.h的文件,是如何运行出来的
我们写出的是test.c的文件,但是最终来说的话,最后编出来的东西叫做test.exe
那在.c和.exe之间起到转化作用的是什么呢?
这东西叫做编译器
哎?你看这就很有那种化学方程式的既视感
test.c ----------> test.exe
编译器
gcc,clang,sublime等等都是编译器的一种
但是需要注意一点,VS2019不是编译器,它叫集成开发环境
你看,问题又来了,集成开发环境又是什么
集成开发环境里面包含编译器,链接器,调试器,感觉上来讲就像你过年买的旺旺大礼包,里面啥都有
我们后面就用VS2019了吧
5.先写一个吧
你看,说了这么多,抛开理论谈实战还是没用的
我们先来看一下怎么搞,怎么能够写出一个C语言程序来
打开你的VS2019(安装的部分还是去问浏览器比较好,我已经忘记了)
选择新建项目
点击空项目
点击下一步
然后就是选择你给你的代码起个名字,选择储存的路径,很多人不管是存图片还是什么乱七八糟的东西命名的时候都习惯性的在键盘上乱敲一顿,不重复就算成功
我的建议来讲的话就还是多少用点心思给他起个名字,要不然的话
你乱打的样子很靓仔,但是你后面来回找的样子是真的很狼狈
写C语言的代码,某种意义上将就是去写前文提到过的.c这类的文件
.c类型的叫源文件
.h类型的叫头文件
下面就来最经典的开山代码,打出你的hello world
(VS2019中,CTRL+F5,就可以运行了)
#include<stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
(1)这里面的int main部分里的main函数:main函数是程序的入口
为什么这样说,在VS里可以这样试一下,按下F10
你将会发现代码的左侧出现了一个箭头指向了main函数的第一行
所以来说,程序是从main函数的第一行开始执行的
此外,一山不容二虎,一码不侍二主
只能有一个main函数,主函数必须要有,并且有且仅有一个
int main()里的int 是整型的意思,所表示的就是
“当main函数运行结束后,返回一个整型的值”
(2)承接1中的描述,return 0部分中的0,就是一个整数,在main函数结束的时候被返回
(3)在屏幕上打印出hello world,打印的函数,就是printf("")
里面的\n,是回车换行的意思
printf是一个库函数,库函数的意思就是库里提供的函数,不是你自己的函数
使用库函数时,需要包含一个头文件,这就引出了我们的
(4)包含一个头文件,就是
#include<stdio.h>
(5)我们说的任何语言都要讲究语法,英语汉语这些都有
计算机语言也是一个道理,计算机语言里的语法就是告诉你怎么写代码
6.聊聊数据类型?
不同的需求产生了不同的数据类型
计算机语言需要依靠不同的数据类型来满足对现实世界不同类型的描述要求
char 字符数据类型
short 短整型
int 整型
long 长整型
longlong 更长的整型
float 单精度浮点数
double 双精度浮点数(比单精度精度高就是了)
不同的武器解决不同的对手,不同的数据类型解决不同的问题
那我们来点例子
(1)对于人的年龄,我们用int或者short都行(int age=15)
代码里的意思是用int这一类型创建一个叫age的变量,赋值为15
(2)怎么描述3.14,用float或者double
然后就是涉及到大小的问题,分类还有一个作用,就是根据类型的不同来分配不同大小的空间
面对新的问题,我们要整合现有资源,作出新的打法,形成资源整合,打出组合拳(不是)
说人话,就是你可以试试另一个函数,叫sizeof
C语言中这个函数就是用来计算变量或者使用类型的大小,单位是字节
问题又来了
字节是啥?
对于存放二进制里的1或者0,所需要的空间大小是一个比特位(1 bit)
8个比特位就等于一个字节(8 bit =1 byte)
剩下的换算都是大家所熟知的一个数字了,叫1024
1kb =1024 b
1mb =1024 kb
以此类推
代码如下
#include<stdio.h>
int main()
{
printf("%d\n",sizeof(char));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(double));
return 0;
}
这里需要解释一下前面那个"%d"是什么意思,
%d是用来输出十进制整型数据的实际长度输出;
再补充一个,%c是以字符形式输出,只输出一个字符;
那么我们的结果与上文的类型统一之后大小如下
char 字符类型 1字节(对于字符类型用单引号)
short 短整型 2字节
int 整型 4字节
long 4字节
long long 8字节
float 4字节
double 8字节
7.变与不变,变量与常量
这个也简单,对于不变的量用常量表示
描述·变化的值就用变量
定义变量的方式也很简单,类型+名字
比如 int age;
需要注意的是,变量是需要初始化的
同时,变量是有分类的。和你做手术打麻药一样,“全麻还是局麻啊?”
变量分为两种,局部变量和全局变量
代码块里面定义的,就叫局部变量
代码块外面定义的,就叫全局变量
用的时候呢,和英语语法里的就近原则一样
全局局部同时有的情况下,代码块里面就用局部变量(发生冲突时,局部变量优先)
我们的第一部分就到这里了
所以复盘一下我们都大体上聊了点啥
啥是计算机语言,C语言的用处与标准,C语言的文件是怎么跑起来的,编程人的第一个hello world,数据类型的分类与大小,全局变量与局部变量。
我们下一篇文章再见,我是宇宙牌气泡水,分享一些我想分享的东西。