您的位置:首页 > 编程语言 > C语言/C++

C语言编程预备知识

2014-12-21 14:37 218 查看
很多人写程序很长时间了,一些基本的知识都不一定完全理解,下面做一个总结,对新手有个好的引导作用。

1、CPU、内存条、硬盘、显卡、主板、显示器之间的关系

以播放一部电影为例:电影是以0101的形式存储在硬盘上,当我鼠标双击之后,操作系统就会把电影从硬盘上拷贝到内存条中,或者叫调入内存条,CPU再对这些内容进行处理,如果是显示的画面信息,就通过显卡显示出来,声音信息通过声卡发出声音。至于主板,提供了中间的传输通讯组织设备。

2、HelloWorld程序如何运行起来的

通过VC++这个软件,点击编译和连接,把代码文字生成一个后缀为.exe的文件,再点击运行,VC++6.0这个软件便会请求操作系统,让CPU执行.exe文件,而不是软件直接执行这个文件。所有的软件都是建立在操作系统上,请求操作系统让CPU执行。最早期的Win98可以支持软件直接访问硬件,后来所有的操作系统都不允许软件直接访问硬件,必须经过操作系统。

3、什么是数据类型

基本的数据类型:

整数:整型 int(4个字节),短整型short(2个字节),长整型long(8个字节);

浮点数:单精度浮点型float(4个字节),双精度浮点型double(8个字节);

字符:单个字符char (注意:C中没有字符串,和java不一样,没有String类型),如果要存储一些字符串,那么可以通过字符数组来表示,后期会介绍到,char i = 'A' ;(注意单引号)

复合类型数据:把基本类型的数据拼合在一起,就是复合类型数据,后边会介绍到。

4、什么是变量

我们每天都在用变量,但是到底变量是什么呢?int i = 3 ;第一个问题,这个3放在那儿呢?最终3是存放在内存中,程序终止之后3所占据的空间,被释放掉。第二个问题:这个3是放在内存的什么地方呢?当程序开始运行的时候,操作系统向内存请求一块空闲空间,然后把这个空间和这个字母 i 产生关联;i=3的执行结果就是把3放进和 i 有关联的这个空间里。所以以后使用到 i ,都会找到类似的对应空间。如果我们不使用变量,那么相当于我们自己得要去内存中找空闲单元,内存中分很多单元,每个单元都有自己的编号,如果我们要使用很多,那几乎不可能的。所以变量其实就是我们自定义的一个字母,对应内存中的单元,变量的本质就是内存中一段存储空间。

5、CPU、内存条、Vc++6.0和操作系统之间的关系

软件请求操作系统在内存条里分配一段空闲空间,然后把这段空闲空间和字母 i 产生关联,以后使用 i 就是对应这段空间的存储值。

6、变量为什么要必须的初始化(赋值)

我们先看一段代码的输出:

# include <stdio.h>
int main (void){
int i ;
printf("i = %d\n", i);
return i;
}
可以看到屏幕上会输出一组数字:i = -858993460;点击再次运行之后发现是同一个数字,并不是随机值,这是为什么呢?

因为我们代码中定义了这么一段存储空间 i ,但是并没有对它进行赋值;就直接输出了,那么这输出的值肯定就是之前的值了。首先:i 这个空间暂时是空闲的,但是可能之前被其他软件使用过,例如看电影,虽然软件关闭,空间释放(释放不是说空间被删了,而是说这个空间可以分配给其他的程序使用了),里边可能会遗留之前软件使用遗留的数据,也就是垃圾数据,如果我们没有初始化,所以会有存留。但是为什么是固定的值呢?这就是软件为我们解决的,放入了填充字。也就是VC++这个软件,如果发现一个变量里边是垃圾值(没有初始化),便会自动放入一个很大的数字,以8开头的,来提醒我们没有赋值。

6.1、内存的基本概念

1)内存是用来存储数据的设备,它的存储速度介于寄存器和硬盘之间。

2)内存条是CPU唯一可以访问的大容量的存储设备;所有硬盘中的程序和数据必须调入内存之后才可以被CPU执行!切记:CPU不能直接处理硬盘中的数据。

3)内存的问题是软件开发中最核心的问题之一!例如内存的分配,内存的释放,内存什么时候分配,什么时候释放,由谁来分配,由谁来释放,分配在什么地方,访问权限如何。

4)内存是由多字节组成的线性唯一存储空间

5)内存的基本划分单位是字节

内存这部分太重要了,后期将会再介绍。

6.2、软件运行和内存关系

内存是在操作系统的统一管理下使用的!1)软件在运行前需要向操作系统申请存储空间,在内存空闲空间足够事,操作系统将分配一段内存空间并将外存中软件拷贝一份存入该内存空间中,并启动该软件运行!2)在软件运行期间,该软件所占内存空间不再分配给其他软件;3)当软件运行完毕后,操作系统将回收该内存空间(注意:操作系统并不清空该内存中遗留下来的数据),以便再次分配给其他软件使用。综上所述,一个软件所分配到的空间中极有可能存在着以前其他软件使用过后的残留数据,这些残留数据被称之为垃圾数据。为什么不清空呢?可以学习操作系统这门课程。所谓的回收,其实如果这个空间在使用,就写个”1“或者"已占用",如果没有被使用,则标记"空闲",所谓回收,其实就是把”已占用“标记变成"空闲",改个标志位就可以了,而不是数据改写。

7、如何定义变量

int i = 3, j = 5; 等价于 int i ; int j ; i = 3; j = 5;其他写法略。

8、什么是进制(略)

C语言规定八进制钱要加0(注意是零不是字母o),十六进制前要加0x或0X,十进制前什么都不加。

例如5的写法;

十进制:5

八进制:05

十六进制:0x5或者0X5

在汇编中:在数字后加上字母B表示二进制,加字母O表示八进制,加字母D表示十进制,加字母H表示十六进制。

例:

1011B为二进制数1011,也记为(1011)2(最后的2缩小写在右下角,因为电脑上不知道怎么打出来,同理下边)

1357O为八进制数1357,也记为(1357)8;

2049D为十进制数2049,也记为(2049)10;

3FB9H为十六进制数3FB9,也记为(3FB9)16;

9、常量在C语言中时如何表示的

整数:同上

浮点数:1)传统的写法 float x = 3.14159;2)科学计数法 float x = 3.2e3 //x的值是3200,float x = 123.45e-2,//表示的是1.2345,这里e表示的是10,-2表示10的-2次方。

字符:单个字符用单引号括起来,如果是字符串,用双引号括起来。'A'这样表示正确,"A"这样表示也正确,因为是代表了‘A’ ‘\0’的组合。

10、常量是以什么样的二进制代码存储在计算机中

整数是以补码的形式转换成二进制代码存储在计算机上的,实数是以IEEE754标准转成二进制代码存储,字符的本质实际也是以整数的存储方式相同。

11、什么是字节

字节就是存储数据的单位,并且是硬件能访问的最小单位。1个字节等于8位,但是CPU只能访问内存到字节,不能精确到位。

1字节 = 8位

1K = 1024字节

1M = 1024K

1G = 1024M

12、什么是ASCII码

C里边所有的字符串,系统都会默认的加上"\0",表示的是结束符,所以“A”实际上是有两个字符,如果 char ch = "A" 这样写是会报错的,因为A加上"\0"之后,实际上是有两个字符了,所以不能用char ch 来存储,总之双引号的值不能赋给单个字符。

ASCII码不是一个值,而是一种规定,它规定了不同的字符使用哪个整数值去表示。例如规定了‘A’--65,‘B’--66,‘a’--97,‘b’--98,‘0’--48,都是有一一对应的关系的。所以字符本质上的存储方式和整数是一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: