教群友C艹,第一天

我感觉我自己跟个傻子一样自言自语半天

Posted by steve02081504 on October 2, 2020

原九度凋 2020-10-02 12:49:39
@全体成员 本群主要给@路过的学生 @BurringAshes 讲c艹,其他人可看情况纠错补充
不经过同意就把你们拉过来了2333
要是有不感兴趣的直接退就好

原九度凋 2020-10-02 13:00:55
emmm先从计算机历史讲起吧,计算机一开始是为了织布机设计的,主要用于织出不同图案的布

原九度凋 2020-10-02 13:02:09
后续经过一系列演进,基本架构出现了:cpu和ram

原九度凋 2020-10-02 13:03:10
ram负责储存数据,现今主要以高低电平实现

原九度凋 2020-10-02 13:04:22
cpu的功能则有这几个:读ram,计算,写ram

原九度凋 2020-10-02 13:09:02
一般来说cpu内部有几个寄存器用于存储数据,而cpu启动后便进入这样的循环:读取某个特定寄存器的值并将其作为ram中数据的地址,读取这个ram中的数据然后执行其指令集中对应的操作,然后把那个特定寄存器中的值加一(下一个指令),然后就此往复

原九度凋 2020-10-02 13:09:44
cpu的指令集和那个寄存器干什么是设计者决定的

原九度凋 2020-10-02 13:13:20
早期计算机并没有显示器或键盘,使用者需要通过纸带穿孔并配套读纸器来初始化ram,然后再启动cpu计算,完毕后直接看指示灯来读内存或读输出的纸带或布料

原九度凋 2020-10-02 13:14:55
本质上cpu与ram的框架至今也没有变,软件所做的一切仍然是被cpu解释然后操作ram

原九度凋 2020-10-02 13:18:11
所谓软件本质上只是ram中的数据,被cpu解释执行

原九度凋 2020-10-02 13:20:45
顺便一提,有什么不懂的可以直接问我

原九度凋 2020-10-02 13:22:01
你可能会好奇,如果CPU只能操作RAM的话,那电脑是如何连接上显示器,鼠标以及键盘的?

原九度凋 2020-10-02 13:22:56
这一点很简单,实际上电脑的设计者用一系列的中转操作,将鼠标,键盘等外部设备都对cpu来说抽象为了ram

原九度凋 2020-10-02 13:23:40
比如一个只有CPU没有显卡的电脑,当它在屏幕上显示画面的时候,它实际上是在以一个特定的频率写着某一区域的RAM

原九度凋 2020-10-02 13:24:24
这一区域的ram会被显示屏相关的硬件识别,然后转换为显示屏能够输出的信号

原九度凋 2020-10-02 13:25:07
当CPU写速度比较慢的时候就会出现画面只有一部分被更新的情况,也就是早期比较常见的画面撕裂

原九度凋 2020-10-02 13:25:39
所有被连接在电脑上的一切设备,对CPU而言都只是ram

原九度凋 2020-10-02 13:26:32
你在敲击键盘的时候,键盘相关的硬件会将你敲击键盘的数据写入RAM,再由CPU进行读取

原九度凋 2020-10-02 13:27:12
所以总而言之,软件只是一种数据,它可以被加载,被执行

原九度凋 2020-10-02 13:27:28
底层相关的就暂时只讲解这么多

原九度凋 2020-10-02 13:27:52
操作系统本质上也只是软件,负责管理和调度其他的软件

原九度凋 2020-10-02 13:28:07
好了回归正题,计算机的发展

原九度凋 2020-10-02 13:29:20
随着键盘和显示器等比较接近人类使用的硬件的出现,那些写软件的人们也不甘于整天设计内存中的数据,并将其用打孔器打在纸带上

原九度凋 2020-10-02 13:30:35
于是有人写了一款软件,对文字和计算机指令集进行翻译:这款软件可以读入键盘上打入的文字,并将其转换为对应的计算机指令,然后写到内存(ram)中

原九度凋 2020-10-02 13:30:47
这就是汇编语言

原九度凋 2020-10-02 13:32:39
比如mov al, 2
这个软件就会将这句人能看懂的话转换为计算机CPU,能够执行的指令集
顺便一提,这句话的意思为将数据2写入名字为al的寄存器中

原九度凋 2020-10-02 13:33:04
之所以字比较少,是为了节省打字时间以及翻译软件的体积

原九度凋 2020-10-02 13:33:28
尽管一长串这样的汇编代码仍然很难读懂,但是相比于在纸片上打孔已经要好很多了

原九度凋 2020-10-02 13:34:58
现如今这样的翻译软件被称为编译器,功能是将文本转换为计算机的指令集

原九度凋 2020-10-02 13:35:55
在汇编语言出现后,随着计算机的日渐发展,有人提出了设计更为抽象的语言的想法

原九度凋 2020-10-02 13:36:35
第一个这么做的应该是C语言,不过我记的不是特别清楚

原九度凋 2020-10-02 13:37:31
C语言让用户彻底不用管寄存器,不用操心自己所用的指令是否在指令集中

原九度凋 2020-10-02 13:37:59
现在先来教一下最基本的c语法吧

原九度凋 2020-10-02 13:39:19
int func(){
/*这里有一些东西*/
return 0;
}

原九度凋 2020-10-02 13:39:50
首先第一行

原九度凋 2020-10-02 13:40:22
返回类型 名称(参数列表)

原九度凋 2020-10-02 13:40:31
这是声明一个函数的三大部分

原九度凋 2020-10-02 13:41:04
在c中常见的类型,有以下几种:char int float

原九度凋 2020-10-02 13:41:16
反正拿着几种基本上够用

原九度凋 2020-10-02 13:42:12
char类型用于存储字符,是“字符”的英文character的缩写

原九度凋 2020-10-02 13:42:50
int用于存储整数,float用于小数,同样也是缩写

原九度凋 2020-10-02 13:43:12
在这里说明一下,一切你见到的名字你都不用去故意记

原九度凋 2020-10-02 13:43:30
你只要知道有这么个东西,然后要用到的时候去网上查叫什么就行

原九度凋 2020-10-02 13:44:14
int func()表明这个函数名字叫func,返回类型是int,参数列表是空的

原九度凋 2020-10-02 13:44:33
而后的大括号中的内容全部都是这个函数的具体定义

原九度凋 2020-10-02 13:45:25
/*注释*/
这样的内容会被编译器直接跳过,忽略掉,这是只给人看的,方便理解

原九度凋 2020-10-02 13:46:05
return是关键词,它表明函数执行到这里的时候中止执行,并且返回其后的值

原九度凋 2020-10-02 13:46:56
关于函数的更为详细的说明,可以见这个https://zh.cppreference.com/w/c/language/functions

原九度凋 2020-10-02 13:47:54
今天就先讲到这里,通过这个网页,自己看一下函数应该如何定义如何调用

原九度凋 2020-10-02 13:48:21
这个属于比较入门的内容

原九度凋 2020-10-02 13:48:33
明天会开始讲一些进阶的

spice 2020-10-02 13:48:35
写博客吧写博客吧,技术交流,常见问答还可以积累下。

原九度凋 2020-10-02 13:48:58
有些懒

原九度凋 2020-10-02 13:49:04
[图片]

spice 2020-10-02 13:49:43
而且很多基本概念已经有很好的入门材料了,是要训练自己的表达能力吗

雨声十六叶 2020-10-02 13:50:05
建议聊天记录复制粘贴.√

spice 2020-10-02 13:50:09
+1

原九度凋 2020-10-02 13:51:05
就算内容不用自己写,还是要去找背景图,去起标题

原九度凋 2020-10-02 13:51:12
emmmmm

雨声十六叶 2020-10-02 13:51:38
更新blog不香吗.

spice 2020-10-02 13:52:06
信息组织能力,恰到好处的抽象,以后参加技术分享这些能力都用得到呀

原九度凋 2020-10-02 13:52:18
懂了懂了,这就去做

原九度凋 2020-10-02 13:55:17
@路过的学生 @BurringAshes 我讲的都是极为骨干的内容,有很多东西需要你们自己去扩充,比如函数内部的定义应该如何去写,如何去控制函数的走向流程,如何去使用一些关键字比如if或者while或者goto,以及如何创造变量以及变量的生存周期等

原九度凋 2020-10-02 13:56:47
我打算用四五天时间分别讲完函数 结构体 指针 类 模板

原九度凋 2020-10-02 13:57:02
但由于时间相当有限,所以我也只会挑很干的东西来讲

原九度凋 2020-10-02 13:57:30
在四五天过后,我会带你们看一些实际的例子,你们也可能会学到一些新的东西

路过的学生 2020-10-02 13:57:44
好

原九度凋 2020-10-02 13:58:00
关于书的话,我推荐c艹 primer plus

原九度凋 2020-10-02 13:58:19
如果是大学发的书,如果作者署名是谭浩强的话,千万不要看

原九度凋 2020-10-02 13:58:32
会严重打击你学习的信心,以及严重混淆你的知识

原九度凋 2020-10-02 13:59:22
在空闲时间可以上cppref瞎看看,很有帮助
https://zh.cppreference.com/

原九度凋 2020-10-02 14:00:36
有看不懂的,也可以直接问我,私聊或者群里都行,我推荐在群里,这样也许也能顺便解答其他人的同样的疑惑

原九度凋 2020-10-02 14:01:35
像我说的,我很建议你们去在网上找一些栗子去看

spice 2020-10-02 14:12:49
网上的例子:
https://www.geeksforgeeks.org/c-plus-plus/?ref=leftbar
https://xege.org/
https://www.codeproject.com/

咱觉得,按照某球的说法,csapp建立常识,不用翻完,大概看看即可。
htdp建立程序设计基本思想。(划掉)
c++ primer前xx章学好语法。
期间遇到问题再问就好了。

能组织好知识之间的依赖关系并且传达正确很难的。
新人三联:
https://cppinsights.io/
https://godbolt.org/
好吧只有两个>_<

spice 2020-10-02 14:13:14
[文件](C++ Primer Plus.pdf)

spice 2020-10-02 14:13:22
[文件](C++ Primer.pdf)

原九度凋 2020-10-02 14:13:28
帮大忙了

原九度凋 2020-10-02 14:13:55
我先去写blog了

原九度凋 2020-10-02 14:13:59
[图片]


we walk in the dark.



知识共享许可协议
若无特殊声明,本作品网页、文字、程序部分与原本无许可部分采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,以外的部分遵循其原有许可协议。
若您于许可外使用本作品任一部分,其作者有权依法追究您一切民事与刑事责任。