C语言编程预备知识
1.CPU 内存条 硬盘 显卡 主板 显示器 之间的关系
1)、CPU——完成主要的计算和控制工作,是计算机的核心;
2)、内存——Windows操作系统要求程序在内存中运行;
3)、硬盘——电脑主要的存储媒介之一,安装的软件、游戏以及缓存的视频,音乐等都主要以0和1的方式存储在硬盘上供用户使用;
4)、显卡——基本工作是向显示器输出。但是,现在也承担图形计算甚至通用计算任务;
5)、主板——用于搭载各个配件;
6)、显示器——通常也被称为监视器。显示器是属于电脑的I/O设备,即输入输出设备;
它们之间的关系可以通过一个例子来说明。比如说打开一部电影,首先要双击这部电影,这个”双击“是操作系统提供的一个操作。电影本身是放在硬盘上的,当我们通过鼠标对它进行双击之后,操作系统就会将硬盘上的这部电影拷贝到内存中。
为什么要将它拷贝到内存中呢?因为CPU不能直接处理硬盘上的数据。所以要先将硬盘上的数据拷贝到内存中,然后再通过CPU处理内存里面的这部电影。处理的结果就是将一些数据变成图像,另一些数据变成声音。图像数据发送给显卡,通过显示器显示出来,声音数据发送给声卡,声卡将它变成声音放出来。由这个例子我们可以看出CPU、内存条、硬盘、显卡、主板、显示器之间的运行关系。
2.Hello Word程序如何运行起来的
当我们输入以下程序,编译运行,
#include
int main()
{
printf("Hello World\n");
return 0;
}
我们知道,信息在计算机中都是用0或1表示的。因为我们输入的Hello World程序是人可读的,机器并不能直接识别它们。我们需要把这些文字翻译成机器可执行的二进制文件。
这一部分的工作是由编译系统完成的。
一般来说,要将我们上面编写的这段代码变成一个可执行的目标程序,必须要经过 预处理器、编译器、汇编器和链接器 的处理。
预处理器、编译器、汇编器和链接器 一起构成了编译系统
①、预处理阶段:预处理器 cpp 根据以字符 # 开头的命令,修改原始的 C 程序,比如 第一行 #include 命令告诉预处理器读取系统文件 stdio.h 的内容,并把它直接插入到程序中。结果就得到另一个 C 程序,通常是以 .i 作为文件扩展名。
②、编译阶段:编译器 ccl 将文本文件 hello.i 翻译成文本文件 hello.s,它包含一个汇编语言程序,汇编语言程序中的每条语句都以一种标准的文本格式确切的描述一条低级机器语言指令。汇编语言能为不同高级语言的不同编译器提供通用的输出语言。
③、汇编阶段:汇编器 as 将hello.s 翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在目标文件 hello.o 中,hello.o 文件是一个二进制文件,它的字节编码是机器预言指令而不是字符。如果我们用文本编辑器打开 hello.o 文件,将会是一堆乱码。
④、链接阶段:在 hello.c 程序中,我们看到程序调用了 printf 函数,它是每个 C 编译器都会提供的标准 C 库中的一个函数。printf 函数存在于一个名为 printf.o 的单独的预编译好了的目标文件中,而这个文件必须以某种方式合并到我们的 hello.o 程序中。链接器 ld 就是负责处理这种合并,结果就得到一个 hello 文件,它是一个可执行目标程序,可以被加载到内存中,由系统运行。
3.什么是数据类型
我们人类可以很容易的分清数字与字符的区别,但是计算机并不能,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它。
4.什么是变量
变量,是指没有固定的值,可以改变的数。变量以非数字的符号来表达,一般用拉丁字母。变量是常数的相反。变量的用处在于能一般化描述指令的方式。结果只能使用真实的值,指令只能应用于某些情况下。变量能够作为某特定种类的值中任何一个的保留器。
变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言中,变量可能是不可变的。在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中);但另外一些语言可能使用其它概念(如C的对象)来指称这种抽象,而不严格地定义“变量”的准确外延。
5.变量为什么必须的初始化
这个问题很是重要,所谓初始化就是“第一次赋值”的意思,我们先来看一下程序
# include
int main(void)
{
int i;
printf("i = %d\n", i);
return 0;
}
这里的 i 没有被赋值,只是定义了一个存储空间。这个时候输出这个空间的程序,你会发现输出了”i = 一串的垃圾数字“
在上面的程序中,没有给这个程序内存单元赋值就把它输出,所以问题就是出在这里,你只定义了一个变量 i 但是没有初始化赋值。
这里的 i 单元 虽然没有赋值,但是这个空间在之前可能被其他软件使用过,以前软件使用过 i 这个内存空间的话,那么那些垃圾数据还在里面保存着,如果没有初始化,那么它里面就应该是一个随机的垃圾值,但是当我们执行多次发现不是一个随机值,而是一个不变的值,这是为什么呢?这个值叫做“填充数字”或者“填充字”。
初始化就是“第一次赋值”的意思。
6.如何定义变量
C语言中变量遵循“先定义后使用”的原则:
1)、定义变量的格式:数据类型 变量名;
变量的定义是一条语句,每条语句都是以分号结尾的;
2)、接下来就是使用变量,为变量赋值。
”为变量赋值“意思就是将一个值传给一个变量。
赋值的格式是:变量名 = 要赋的值;
等价于
数据类型 变量名 = 要赋的值;
举例子:
int i = 3; 等价于 int i; i = 3;
int i, j; 等价于 int i; int j;
int i, j = 3; 等价于 int i; int j; j = 3;
int i = 3, j = 5; 等价于 int i; int j; i = 3; j = 5;
int i, j; i = j = 5; 等价于 int i, j; i = 5; j = 5;
今天就这么多吧。变量这一块还是比较重要的。
举报/反馈