首页 > 代码库 > 黑马程序员_第一天视频学习
黑马程序员_第一天视频学习
一、 计算机和软件常识
1. 计算机运行原理
1) 硬件基本组成:硬盘、内存、CPU
2) 各个部件之间的运作协调(下图)
2. 计算机只能识别0和1
1) 0和1组成的指令
2) 0和1组成的数据
3. 计算机和软件的联系
1) 软件的基本概念:指令的集合
2) 软件的安装运行过程
3) 为什么要开发软件:写出能控制计算机的指令
4. 计算机语言
1) 一门跟计算机打交道的语言
2) 方便写出一连串的指令
二、 计算机语言发展史
1. 机器语言
1) 简介:所有代码里面只有0和1,每一条指令称为“机器指令”
2) 优点
代码能被计算机直接识别,直接对硬件产生作用,程序的执行效率非常高
能直接访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等
3) 缺点
程序全是些0和1的指令代码,可读性差,还容易出错
对硬件的依赖性很强,因此不同型号计算机的机器语言又不一样。也就是说,如果2台不同型号的机器想实现一样的功能,需要编写2套完全不同的代码
要熟记所用计算机的全部指令和指令的涵义,指令又多又难记
4) 使用场合
综上所述,机器语言很难掌握和推广,现在除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了
2. 汇编语言
1) 简介:用英文单词等符号代替机器指令
2) 优点
像机器语言一样,可以直接访问、控制计算机的各种硬件设备
占用内存少,执行速度快
3) 缺点
不同的机器有不同的汇编语言语法和编译器,代码缺乏可移植性,也就是说,一个程序只能在一种机器上运行,换到其他机器上就不能运行
符号非常多、难记,即使是完成简单的功能也需要大量的汇编语言代码,很容易产生BUG,难于调试
必须对硬件非常了解,开发效率很低,周期长且单调
4) 使用场合
操作系统内核、驱动程序、单片机程序
软件的加密、解密、破解
病毒的制作、防治
程序的调试、分析
3. 高级语言
1) 简介:接近自然语言
2) 优点
简单、易用、易于理解,语法和结构类似于普通英文
远离对硬件的直接操作,使得一般人经过学习之后都可以编程,而不用太熟悉硬件知识
一个程序还可以在不同的机器上运行,具有可移植性
3) 缺点
程序不能直接被计算机识别,需要经编译器翻译成二进制指令后,才能运行到计算机上
4) 种类:C语言、C++、C#、Java、Objective-C等
三、 C语言简介
1. 简史
1) C语言于1972年发明,首次使用是用于重写UINX操作系统(UNIX以前主要是用汇编语言写的,它奠定了操作系统的基础)
2) 随着UNIX操作系统的成功,C语言也得到了大幅度地推广,被先后使用到大、中、小、微型主机上,至今还是世界上最流行、使用最广泛的高级程序设计语言之一
3) C语言是一门面向过程的语言,非面向对象的语言
2. 特点
1) 丰富的运算符
2) 丰富的数据类型
3) 可以直接操作硬件
4) 高效的目标代码
5) 可移植性好
3. 主要用途
1) 编写系统软件、图形处理、单片机程序、嵌入式系统开发
2) 编写游戏外挂
3) 编写android程序
4) 编写iOS程序
……
4. 版本问题
1) 1983年美国国家标准局(American National Standards Institute,简称ANSI)成立了一个委员会,开始制定C语言标准的工作
2) 1989年C语言标准被批准,这个版本的C语言标准通常被称为ANSI C
3) 1999年,国际标准化组织ISO又对C语言标准进行修订,在基本保留原来C语言特征的基础上,针对应该的需要,增加了一些功能,命名为C99
4) 2011年12月8日,ISO正式公布C语言新的国际标准草案:C11
四、 代码的编写
1. 程序结构
1) 先C程序的结构:由函数组成
任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”。所以,你可以说C语言程序是由函数构成的
2) 函数的基本概念
函数名:一个程序中由无数个函数组成,每个函数都有自己的名称
调用(执行)函数:根据函数名就可以调用对应的函数,执行相应的功能
3) C程序的入口
C程序的入口是一个名字叫做main的函数,简称main函数
不管整个程序中有多少个函数,都是先执行main函数
2. 编写程序
1) 编写main函数(大括号{ }中的内容是函数体)
int main(){ return 0;}
2) 编写多个函数,并且进行调用
int test(){ return 0;} int main(){ test(); return 0;}
3) 使用printf函数输出内容到屏幕上
#include <stdio.h>int main(){ printf("Hello World!"); return 0;}
五、 编译
1) 什么是编译:将C源程序翻译成计算机能识别的0和1
2) 使用什么编译器:Xcode3使用GCC,Xcode4使用LLVM编译器(前端用clang)
3) 如何使用clang编译器编译程序?
在终端中输入:cc –c 文件名.c
编译成功,会生成.o目标文件
4) 编译器的错误和警告功能
如果代码有语法问题,编译器会直接报错。并指出错误的个数和具体行号。
只要有1个错误,程序就不能编译成功,也不会生成.o文件
警告信息只是编译器的一些建议,并不影响编译通过
六、 链接
1) 链接的作用:将.o文件和C语言函数库组合在一起,生成可执行文件
2) 由链接器完成,clang编译器里面已经包含了链接指令
在终端中输入:cc 文件名.o
链接成功,会生成a.out可执行文件
七、 运行
1) 两种运行方式
直接双击打开a.out文件
终端中使用 ./a.out 指令
2) 修改文件内容之后,一定要重新编译、链接,再运行
3) \n的作用:回车换行
八、 其他clang指令
修改可执行文件名称:cc xxx.o -o 文件名
一起编译、链接:cc xxx.c
九、 初学者常见错误
不写分号、用了中文分号
字符串少了双引号、或者用了单引号,双引号里面又有双引号
代码没有写在main函数内部、return之前
文件拓展名不是.c或者.C,比如.txt
用绝对路径编译文件,注意目标文件生成的地方
十、 总结
1) 整个程序的运行过程
2) 总结常见文件的拓展名
.c是C语言源文件,在编写代码的时候创建
.o是目标文件,在编译成功的时候产生
.out是可执行文件,在链接成功的时候产生
3) 总结clang指令
编译:cc –c xxx.c
链接:cc xxx.o
编译、链接:cc xxx.c
运行可执行文件:./a.out
4) 开发中会遇到哪些错误?如何解决?
u 语法错误,可以通过编译器的报错信息解决
u 逻辑错误,需要耐心调试程序
5) 学习建议
学编程并不是学英文
程序的可读性
初学者不要过于寻根问底
十一、 习题
用2种不同的代码方式输出下面的图案
************
** itcast **
************
代码1:
#include <stdio.h>int main(){ printf("************\n"); printf("** itcast **\n"); printf("************\n"); return 0;}
代码2:
#include <stdio.h>int main(){ printf("************\n** itcast **\n************\n"); return 0;}
十二、 关键字
1. 什么是关键字
1> 关键字就是C语言提供的有特殊含义的符号,也叫做“保留字”
2> C语言一共提供了32个关键字,这些关键字都被C语言赋予了特殊含义
auto double int struct break else long switch
case enum register typedef char extern return union
const float short unsigned continue for signed void
default goto sizeof volatile do if while static
大致浏览一遍即可,不用去百度每个关键字的作用,这些关键字以后会经常用到的,到时候你想不记住都难
2. 关键字的特征
1> 全部都是小写
2> 在开发工具或者智能文本编辑工具中会显示特殊颜色。默认情况下,C语言中的所有关键字在Xcode中都会显示紫褐色
3. main函数中哪些是关键字
int、return
十三、 标识符
1. 什么是标识符
标识符就是在程序中自定义的一些符号和名称。要跟关键字区分开来:关键字是C语言默认提供的符号,标识符是程序员自定义的
2. 标识符的作用
1) 标识符,从字面上理解就是用来标识某些东西的符号,标识的目的就是为了将这些东西区分开来
2) 其实,标识符的作用就跟人类的名字差不多,为了区分每个人,就在每个人出生的时候起了个名字
3) C语言是由函数构成的,一个C程序中可能会有多个函数,为了区分这些函数,就给每一个函数都起了个名称。函数的名称就是标识符的一种。除了函数,以后还会学到“变量”这个概念,变量的名称也是标识符
3. 命名
1> 命名规则(一定要遵守)
l 只能由26个英文字母的大小写、10个阿拉伯数字0~9、下划线_组成
l 严格区分大小写,比如test和Test是2个不同的标识符
l 不能以数字开头
l 不可以使用关键字作为标识符
2> 命名规范(最好遵守)
l 尽量起个有意义的名称,比如一个完整的英文单词,别人一看这个名称就能才能这个标识符的作用。如果不懂英文,你也可以用拼音,尽量不要起像abcde、sfsdfsdf等这类看起来没有意义的名称
l 如果标识符中含有多个单词,可以使用驼峰标识(除开第一个单词,后面每个单词的首字母都是大写):firstName、myFirstName,或者使用下划线_来连接:first_name、my_first_name
4. 常见的标识符命名错误
合法标识符 | 非法标识符 | 注释 |
fromNo12 | from#12 | 标识符中不能使用#符号 |
my_Boolean | my-Boolean | 标识符中不能使用“-”符号,应使用下划线“_”代替 |
Obj2 | 2ndObj | 标识符不能使用数字开头 |
myInt | int | “int”是内建关键字 |
jack_rose | jack&rose | 符号“&”不能出现在标识符中 |
GUI | G.U.I | 标识符内部需要出现“.”分隔符 |
十四、 注释
1. 什么是注释
1) 注释是在所有计算机语言中都非常重要的一个概念,从字面上看,就是注解、解释的意思
2) 注释可以用来解释某一段程序或者某一行代码是什么意思,方便程序员之间的交流。假如我写完一行代码后,加上相应的注释,那么别人看到这个注释就知道我的这行代码是做什么用的
3) 注释可以是任何文字,也就是说可以写中文
4) 在开发工具中注释一般是豆沙绿色
2. 单行注释
1) 单行注释以两个正斜杠开头,也就是以//开头,只能注释一行,从//开始到这行的结尾都是注释的内容
2) 任何地方都可以写注释:函数外面、里面,每一条语句后面
3. 多行注释
多行注释以/*开头,以*/结尾,/*和*/中间的内容都是注释
4. 注释的作用
1> 被注释的代码不会参与编译
注释是写给人看的,不是给计算机看的。计算机怎么可能看得我们写的中文嘛。因此,当编译程序的时候,并不会将注释编译到.o目标文件中
从.o文件的大小可以间接看出注释后的代码并没有被编译
2> 检查代码的作用
3> 排除错误
5. 注释的嵌套现象
1) 单行注释可以嵌套单行注释、多行注释
// 哇哈哈 // 呵呵呵// /* fsdfsdf */ // sdfsdfsd
2) 多行注释可以嵌套单行注释
/* // 作者:MJ // 描述:第一个C语言程序作用:这是一个主函数,C程序的入口点 */
3) 多行注释不能嵌套多行注释
/* 哈哈哈 /*嘻嘻嘻*/ 呵呵呵 */
4) 下面的写法是错误的
// /* 哈哈哈*/
6. 注释的重要性
要养成写注释的良好习惯。绝大部分项目经理检查下属代码的第一件事就是看有没有写注释,也有很多公司的机试也会检查注释(机试就是给你一道编程题、一台电脑,在规定时间内解题)
今天,你写了几百行代码,很高兴,做出了一个非常不错的功能,但是,忘了写注释。一个星期过后,你再回去看那一段代码,你可能完全看不懂了,这是很正常的事。如果你写了注释,那情况就不一样了,注释可以帮助你回顾代码的作用。
你在某家公司待了1年多,写了10几万行代码,但是你不写一点注释。有一天你离职了,新的员工接手你做的项目,他首先要做的事情肯定是要读懂你写 的代码。可是你一点注释都没写,10万行代码,全部都是英文,这会让这位新员工非常地蛋疼。每个人都有自己的思想,写代码的思路肯定是不一样的,看别人写 的代码是件非常痛苦的事情,特别是没有注释的代码。你不写注释的做法会大大降低公司的开发效率。因此,所有的正规公司都非常重视注释。
7. 习题
看看下列程序能否运行成功,如果能,说出运行结果:
1> 程序1
// 主函数int main() { printf("itcast\n"); return 0;}
运行结果:itcast
2> 程序2
// 主函数int main() { printf("//itcast\n"); return 0;}
运行结果:itcast
3> 程序3
主函数int main() { printf("itcast\n"); return 0;}
不能运行结果
4> 程序4
int main(){ printf(//"itcast\n"); return 0;}
不能运行结果
5> 程序5
int main() // 主函数 { //printf("itcast\n"); return 0;}
不能运行结果
十五、 数据
1. 什么是数据
生活中时时刻刻都在跟数据打交道,比如体重数据、血压数据、股价数据等。在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据、图片数据、视频数据,还有聊QQ时产生的文字数据、用迅雷下载的文件数据等。
2. 数据的分类
计算机中存储的数据可以分为两种:静态数据和动态数据。
1> 静态数据
概念:静态数据是指一些永久性的数据,一般存储在硬盘中。硬盘的存储空间一般都比较大,现在普通计算机的硬盘都有500G左右,因此硬盘中可以存放一些比较大的文件。
存储的时长:计算机关闭之后再开启,这些数据依旧还在,只要你不主动删掉或者硬盘没坏,这些数据永远都在。
哪些是静态数据:静态数据一般是以文件的形式存储在硬盘上,比如文档、照片、视频等。
2> 动态数据(临时数据)
概念:动态数据指在程序运行过程中,动态产生的临时数据,一般存储在内存中。内存的存储空间一般都比较小,现在普通计算机的内存只有4G左右,因此要谨慎使用内存,不要占用太多的内存空间。
存储的时长:计算机关闭之后,这些临时数据就会被清除。
哪些是动态数据:当运行某个程序(软件)时,整个程序就会被加载到内存中,在程序运行过程中,会产生各种各样的临时数据,这些临时数据都是存储在内存中的。当程序停止运行或者计算机被强制关闭时,这个程序产生的所有临时数据都会被清除。
你可能会问:既然硬盘的存储空间这么大,为何不把所有的应用程序加载到硬盘中去执行呢?有个主要原因是内存的访问速度比硬盘快N倍。
程序员最关心的是什么数据呢?
3> 静态数据和动态数据的转换
4. 数据的大小
1) 不管是静态还是动态数据,都是0和1组成的。0和1如何组成这么多的数据?
2) 数据都有大小,静态数据就会占用硬盘的空间,动态数据就占用内存的空间
3) 数据越大,包含的0和1就越多,比特位和字节
4) 1 KB = 1024 B,1 MB = 1024 KB,1 GB = 1024 MB,1 TB = 1024 GB
5. C语言中的数据类型
由于app中的数据种类繁多,为了方便操作数据,C语言数据进行了分类
十六、 常量
1. 什么是常量
常量,表示一些固定的数据
2. 常量的分类
1> 整型常量(int)
包括了所有的整数,比如6、27、109、256、-10、0、-289等
2> 浮点型常量(float\double)
浮点型常量分为double和float两种数据类型
double:双精度浮点型,其实就是小数。比如5.43、-2.3、0.0等(注意,0.0也算是个小数)
float:单精度浮点型,也是小数,比double的精确程度低,也就是说所能表示的小数位数比较少。为了跟double区分开来,float 型数据都是以f结尾的,比如5.43f、-2.3f、0.0f。需要注意的是,绝对不能有10f这样格式的,编译器会直接报错,只有小数才允许加上f。
3> 字符常量(char)
将一个数字(0~9)、英文字母(a~z、A~Z)或者 其他符号(+、-、!、?等)用单引号括起来,这样构成的就是字符常量。比如‘6‘、‘a‘、‘F‘、‘+‘、‘$‘等。
注意:单引号只能括住1个字符,而且不能是中文字符,下面的写法是错误的:‘abc‘、‘123456‘、‘男‘
4> 字符串常量
将一个或者多个字符用双引号("")括起来,这样构成的就是字符串常量。比如"6"、"男"、"哇哈哈"、"abcd"、"my_car4",其实printf("Hello World");语句中的"Hello World"就是字符串常量。
十七、 变量
1. 什么是变量
当一个数据的值需要经常改变或者不确定时,就应该用变量来表示。比如游戏积分。
2. 定义变量
1> 目的
任何变量在使用之前,必须先进行定义。
定义变量的目的是:在内存中分配一块存储空间给变量,方便以后存储数据。
如果定义了多个变量,就会为这多个变量分别分配不同的存储空间。
2> 格式
变量类型 变量名;
比如int num;
l 变量名属于标识符
l 变量类型
u 不同类型的变量占用不同大小的存储空间。内存极其有限,分配适当的存储空间
u 约束变量所存放的数据类型(方便运算)
3> 实例
int main() { int i;char c;int a, b; return 0; }
3. 变量的使用
1> 赋值
往变量里面存点东西,就是赋值。赋值语句后带个分号;
i = 10;
注意:这里的等号=,并不是数学中的“相等”,而是C语言中的赋值运算符,作用是将右边的常量10赋值给左边的变量i
第一次赋值,可以称为“初始化”
初始化的两种形式
先定义,后初始化:int a; a = 10;
定义的同时进行初始化:int a = 10;
2> 修改
可以修改变量的值,多次赋值。每次赋值都会覆盖原来的值
i = 10;
i = 20;
变量i最后的值是20
使用printf输出一个\多个变量的值
int a = 10, c = 11;
printf("a=%d, c=%d", a, c);
double\float\char的输出,格式符的一些小技巧
double height = 1.55;
char blood = ‘A‘;
printf("height=%.2f, 血型是%c", height, blood);
简单的加减操作
int a = 10 + 20;
没有初始化时不要拿来使用(下面的写法是不建议的)
int score;
printf("score=%d", score);
3> 变量之间值的传递
可以将一个变量的值赋值给另一个变量
int a = 10;
int b = a;
l 连续赋值
a = b = 10;
4. 常见错误
1> 变量名相同 int a = 10; int a = 12;
2> 变量的作用域不对
变量的创建和释放过程
代码块作用域 { int a = 10; }