用读小说的方式掌握c语言(仅适合初学,目的是让c的学习不枯燥)

发布于:2022-11-09 ⋅ 阅读:(12) ⋅ 点赞:(0) ⋅ 评论:(0)

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。 C语言能以简易的方式编译、处理低级存储器。比如单片机等都是c语言编程。

在介绍它之前,先来讲个故事,来理解计算机执行的原理以及c语言是如何运行的。

    2077年,由于人类对地球的过度开采,国际局势紧张,核战争一触即发,而此时,你被派乘坐啊苹果号月球探测器前往月球,以解决地球能源问题。

   几个月后,你在月球失去了与地球的联系,无奈之下,你破解了自动驾驶系统计算好轨道,用一支圆珠笔启动了火箭飞往地球,落地后,发现世界上大部分的生物都灭绝了,但是你惊奇的发现,数据库由于地理位置偏僻,保护严实,还能继续使用,你和同行的宇航员相视而笑,对,第一件事就是造个计算机出来,以便百度出生存攻略。

    你脑海里闪过一丝cpu原理图,它是由alu,寄存器,和缓存器(cash memory)构成的,alu是运算单元,里面由各种逻辑门电路构成,可以进行简单的二进制运算,比如0110+1000=1110酱紫的运算,光有运算还不行,还得有储存,就像人类写竖式那样,得把数据记录起来,寄存器就诞生了,它离cpu最近,取指令数据一般都从寄存器中取,可是内存太小,怎么办呢,于是你又加了缓存来存放数据,虽然速度不如寄存器快,但是存的数据多。于是你拿起一把沙子,不停的搓沙子,手里渐渐出现了cpu的轮廓。

 

    又捡起地上的内存(以后讲内存)和硬盘,组成了计算机,可是没有系统,怎么用呢?

众所周知,计算机只认识0和1,0和1用术语说,这个就叫机器语言,对人很不友好,不小心输错一个数,程序就运行不起来,但你只好按照机器语言编写程序操作,0100100  1010111100111000

前面的二进制是指令,后面的二进制是数据,(二进制输出hello需要很多行密密麻麻的0和1,这里就不写了)经过一番折腾,你终于让计算机说出来第一句话“hello world”,可是既然是自己做的设备,为什么不给他们起个名字统一管理呢?给寄存器取名为eax,ebx。。。。一顿操作后,你有了汇编语言,汇编是较低层语言,但相比机器语言方便了很多,只要写这些就足够让计算机开口说话了。可是还是不方便,可不可以更简单些,这个时候,高级语诞生了,c就是其中之一。

data segment ;数据段
    string db 'Hello,World!$'
data ends
code segment ;代码段
assume cs:code,ds:data
start:
    mov ax,data ;获取段基址
    mov ds,ax ;将段基址送入寄存器
    mov dx,offset string
    mov ah,9
    int 21h
    mov ah,4ch
    int 21h
code ends
end start

上面是汇编语言,下面是c语言输出hello world

#include<stdio.h>
int main(void)
{
printf("hello world");
return 0;
}

 只要四行代码就完成了以前需要很长时间而又复杂的工作,这里#include<stdio.h>是引用头文件,简单来说,就是引用别人帮你预先写好的函数,等预处理(文章后面会讲)的时候,会把引用的东西替换成头文件里的函数,这样工作量就大大减少,你可以把它当作模块,用的时候就取出来,stdio意思是standard in and out.head(标准的输入输出的头文件),顾名思义,你可以用这个模块进行输入输出的操作,而你想让计算机开口说话,这便是输出,所以需要调用这个库文件来操作。

  下一行中,main是主函数入口,编译的时候会首先找到这个东西,然后从这开始执行代码,就像路标一样。int规定了函数类型,int代表整形函数,除此之外还有float ,char double等。这里的 int main()意思就是这是一个返回值为整数类型的主函数,编译器会从这里开始执行,并返回一个整数。当然你也可以这么写

#include<stdio.h>
void main()
{
printf("hello world");
}

void是不返回值,所以不需要写return 0;中间那个就是命令,print打印再加个f,就是输出后面的文字,这里注意双引号和分号不能丢掉,这些符号是固定格式,告诉编译器你是否写完了这个命令或者其他的信息,所以结尾要分号,输出内容要双引号;

这个时候可能有人要问了,return有什么用呢,我不写也可以运行啊。

咱们所有的程序运行都要依赖系统,也就是Windows,linux,安卓等的东西,他们负责资源分配,你要运行程序,系统就给你分配内存,你关闭程序,系统就把内存分配给其他程序,以保持高效率。而return 0就是告诉系统,我是正常退出的(良民大大滴),而异常退出返回值就是非0值(你可以在vs上运行代码时强制关闭进程,vs下面会写return 的值,这个值绝对不是0),系统可以看到。那为什么我不写return 0也能运行呢,这不是不写可以,只是有人替你负重前行,没错,是编译器帮你写了,但平时还是写上好,要有一个好习惯。

  你的第一个c程序写好了,那么怎么运行在你手搓的计算机上呢?c是编译型语言,需要先转换为可执行文件.obj,编译器会先预处理你的文档,就是把#后的东西转换成函数或常数,然后转换为汇编语言.s文件(上面所介绍的),汇编再把它转换为机器语言.o或.obj,再用连接器,链接系统给的启动文件等的各种文件,成为程序。这就是c的编译过程了

初学者可以尝试写一个c程序(根据反馈会写后续c的教程)

ps:vs下载地址感谢您下载 Visual Studio - Visual Studio (microsoft.com)​​​​​    社区版免费,community。