C语言用变量表示字符宽度,iOS开发 -- C语言基础2(C语言的数据、常量和变量)...

iOS开发 -- C语言基础2(C语言的数据、常量和变量)

数据

一、数据定义

1.图片文字等都是数据,在计算机中以0和1存储。

2.二进制(机器语言)

因为计算机只能识别0和1,因此计算机所能识别的指令和数据都是用二进制数(0和1)来表示的。所谓二进制,就是用0和1来表示所有的数。不过我们日常生活中最常用的是十进制,用0~9来表示所有的数

3. 二进制指令

给计算机灌输一些指令,它就能执行相应的操作,而计算机只能识别由0和1组成的指令。在计算机发展初期,计算机的指令长度为16,即以16个二进制数(0或1)组成一条指令,例如,用1011011000000000这条指令,是让计算机进行一次加法运算。因此,如果要想计算机执行一系列的操作,就必须编写许多条由0和1组成的指令,可以想象的到,这个工作量是如此巨大。

4. 二进制数据

平时我们在计算机中存储的一些数据,比如文档、照片、视频等,都是以0和1的形式存储的。只不过计算机解析了这一大堆的0和1,以图形界面的形式将数据展示在我们眼前。

既然提到了二进制是机器语言,那么与之相对应得也就是汇编语言,那么什么事汇编语言呢

汇编语言:

由于机器语言的种种弊端,严重影响开发效率,后面就出现了汇编语言。汇编语言其实就是符号化的机器语言,它用一个符号(英文单词、数字)来代表一条机器指令。比如,在机器语言中,用1011011000000000这条指令,是让计算机进行一次加法运算;而在汇编语言中,用英文单词“ADD”就可以表示加法运算。一个有意义的英文单词,很明显比一串又臭又长的二进制指令,直观好记多了。

由于计算机只能识别0和1,用汇编语言编写的代码是不能被计算机所识别的,像刚才的“ADD”,计算机肯定不知道是什么意思。因此,用汇编语言编写的代码需要翻译成二进制指令后,才能被计算机识别。这个翻译的工作交给“编译器”去做。

对比机器语言,汇编语言的代码可读性好

汇编语言能像机器语言一样,可以直接访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。使用汇编语言,可以访问所有能够被访问的软、硬件资源。

目标代码简短(目标代码就是经编译器翻译过后的二进制代码),占用内存少,执行速度快。(计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。)计算机的内存是有限的,因此一个应用程序运行时所占用的内存越少越好。

汇编语言是面向机器的,通常是为特定的计算机或系列计算机专门设计的。因此,不同的机器有不同的汇编语言语法和编译器,代码缺乏可移植性,也就是说,一个程序只能在一种机器上运行,换到其他机器上就不能运行。

汇编语言的符号非常多、难记,即使是完成简单的功能也需要大量的汇编语言代码,很容易产生BUG,难于调试

使用汇编语言必须对硬件非常了解,开发效率很低,周期长且单调

高级语言:

由于汇编语言依赖于硬件,代码可移植性差,符号又多又难记,于是人类就发明了非常接近自然语言的高级语言。后面要学习的C语言就是高级语言。

优点

简单、易用、易于理解,语法和结构类似于普通英文,且远离对硬件的直接操作,使得一般人经过学习之后都可以编程,而不用太熟悉硬件知识

写出来的程序更加简洁。比如要计算2个数的和,在高级语言中可以写得非常简洁:d=a+b;。但是在机器语言和汇编语言中,就需要几条甚至几十条指令,而且不同机器还要编写不同的指令代码

用高级语言编写的同一个程序还可以在不同的机器上运行,具有可移植性

注意

用高级语言编写的程序不能直接被计算机识别,需要经编译器翻译成二进制指令后,才能运行到计算机上

二、数据分类

数据分为静态数据和动态数据。

①. 静态数据:一些永久性的的数据,一般存储在硬盘中,只要硬盘没坏数据都是存在的。一般以文件的形式存储在硬盘上,电脑关机重启后依然存在。

②. 动态数据:程序运行过程中,动态产生的的临时数据,一般存储在内存中,内存的存储空间一般较小,计算机关闭后这些数据就会被清除。软件或者电脑关闭则这些临时数据会被清除。

③. 静态数据和动态数据可以转换。

④. 注意:为什么不把动态数据存放到硬盘?因为直接访问内存的速度更快。软件安装在硬盘,运行在内存。程序员应该更加关心内存数据。

三、动态数据和静态数据的转换

硬盘和内存是计算机使用最频繁的两个硬件,它们之间的数据经常要进行转换。

比如,硬盘上有个叫做“C语言.mp4”的视频文件,现在要使用暴风影音来播放

首先打开暴风影音软件,计算机会将暴风影音加载到内存中,紧接着计算机会读取硬盘中视频文件的内容到内存中。暴风影音会解析读取到的文件内容,以视频的形式呈现给用户看。这就完成了一个由静态数据到动态数据的转换。

再比如,你使用迅雷从网上下载一个叫做“C语言.mp4”的视频文件

首先打开迅雷软件,计算机会将迅雷加载到内存中,紧接着迅雷就会从互联网下载视频文件。大家都知道,这个下载过程肯定是要耗点时间的,主要受文件大小和下载速度的影响。每个时间段内下载获取的数据都是先放到内存中,然后再写入到硬盘中。所有数据下载完毕后,硬盘中就会有一个完整的视频文件。这就完成了动态数据到静态数据的转换。

四、数据大小

①. 所有的数据都是由0和1组成的。

②. 数据都有大小,静态数据占硬盘空间,动态数据占内存空间。

③. 数据越大,包含的0和1就越多,

④. 存储数据的单位是比特位和字节。一个1或者0就是一个比特位,即1bit。

⑤. 计算机中,以字节为单位存储数据。1字节=8比特位(1Byte=8bit)。

⑥. 1TB=1024GB,1GB=1024MB,1MB=1024KB,1KB=1024B。

五、数据类型

c2923f3c36f7

C语言数据类型

1.基本数据类型

1) 整型 (int  %d)

2) 字符型 (char  %c)

3) 浮点型 %d

①. 单精度浮点型(float)

②. 双精度浮点型(double)

2.指针类型 void *

3.空类型  void

4.构造类型

1) 数组  a[]

2) 结构体 struct

3) 枚举  enum

4) 共用体 union

注意:C语言中没有布尔类型,表示开始和暂停一般使用0和1表示。

常量

一、常量定义

"量"表示数据。常量,则表示一些固定的数据,也就是不能改变的数据。

二、常量类型

在C语言中,常量大致可以分为以下类型:

1> 整型常量(int)

其实就是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> 变量类型

* 计算机的内存是有限的,现在普通计算机的内存有4G,那么定义一个变量的时候分配多少存储空间给这个变量呢?是4G全部给它么?这很显然不可能,如果把4G的存储空间全部给了这个变量,那就意味着不能再分配空间给其他变量,而且系统也会瘫痪,因为内存不够用了,无法再运行其他程序。因此,我们在定义变量的时候,需要指明变量类型,系统会根据变量类型来分配相应的存储空间。不同数据类型所占用的存储空间是不一样的,如果是字符型(char)变量,就分配1个字节的存储空间;如果是整型(int)变量,就分配4个字节的存储空间。

* 变量类型的还一个作用是用来约束变量所存放数据的类型。一旦给变量指明了类型,那么这个变量就只能存储这种类型的数据,比如整型(int)变量只能存储整型数据,不能存储浮点型数据。

2> 变量名

在程序运行过程,肯定会定义大量的变量,每个变量都有自己的存储空间。那怎么区分这些变量呢?怎么找到变量对应的存储空间呢?为了区分这些变量,定义变量的时候应该为每个变量指定一个变量名,变量名也是标识符的一种。当我们要修改变量的数据时,系统会根据变量名找到变量对应的存储空间,将存储空间里面的数据改掉。

3> 定义

总结可得,定义变量需要2个条件:变量类型、变量名。定义变量的格式为:变量类型  变量名;int main()

{

int i;

char c;

return 0;

}

由于C程序的入口是main函数,因此暂时把定义变量的代码都写在了main函数中。在第3行定义了一个名字为i的整型变量,说明i只能存储整型数据;在第5行定义了一个名字为c的字符型变量,说明c只能存储字符型数据。第3、5、7行的代码都称为“语句”,每条语句后面都有个分号;。

于是,系统就会在内存中分别为变量i、c分配一定的存储空间,如下图所示,i和c各占用一块存储空间。至于究竟占用多少字节的存储空间呢,暂时不用去研究,后面会介绍。

c2923f3c36f7

内存分配

如果是同一种类型的变量,可以连续定义,变量名之间用逗号,隔开。格式为:变量类型  变量名1, 变量名2, 变量名3, ... ;int main()

{

int a, c;

return 0;

}

第3行代码的意思是定义了2个int类型的变量,变量名分别为a、c

三、变量的使用

1> 先定义,再初始化

前面已经定义了两个变量,但是这两个变量并没有存储任何值,我们需要给变量进行第一次赋值,也叫做“初始化”。

变量赋值的格式是:变量名 = 值;

这个等号"="是一个赋值运算符,将右边的值赋值给左边的变量,也就是将右边的值存储到左边变量的存储空间中。int main()

{

int i;

i = 10;

char c;

c = 'A';

return 0;

}

在第4行给变量i赋值一个整型常量10,在第7行给变量c赋值一个字符型常量'A'。像第4、7行这样的赋值操作,称为“赋值运算”。

内存中大致如下图所示,整数10存储在i的存储空间中,字母A存储在c的存储空间中。

(其实我这个图并不是很准确,因为内存中的所有数据都是以0和1的形式存储的,比如10,它会存储成1010;字母A,它会存储成1000001。这里为了达到直观的效果,就没有写成二进制形式)

c2923f3c36f7

2> 定义的同时初始化

上面的代码也可以写成下面这样,在定义变量的同时进行初始化:变量类型  变量名 = 值;int main()

{

int i = 10;

float f = 10.9f;

double d = 9.8;

return 0;

}

c2923f3c36f7

3> 可以不断修改

既然i是个变量,说明它的值可以不断地改变,看下面的代码int main()

{

int i = 10;

i = 89;

char c = 'A';

return 0;

}

在第3行定义了变量i,并且初始值为10。紧接着在第5行把i的值改为89,这个89会覆盖以前存储的10,内存中大致如下图所示

c2923f3c36f7

4> const关键字

刚才提到,默认情况下,变量的值是可以不断改变的。不过,有时候我们会希望变量的值只在定义的时候初始化一次,以后都不能再改变,这个时候我们就可以使用const关键字来修饰变量。int main()

{

const int i = 10;

i = 11;

return 0;

}

注意第3行,在int的前面加了个const关键字。表示变量i的值只会初始化一次,也就是说i的值永远都是一开始的10,以后都不能再改了。所以编译器会报第5行代码的错误,不允许再次修改i的值。

四、变量的使用注意

变量的作用域:从变量定义的哪一行开始,直到代码块结束。

Return;退出函数,清除内存中的数据。

建议:使用矩形方框和excel来分析内存。

代码块{}的作用:可以用来提高性能,即时回收不再使用的变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值