1.知识点回顾
计算机中的一切都是有01代码组成的,C语言是由函数组成的,一个函数就是一个功能模块,就像写文章的段落一样
main()是程序的入口,编辑-》编译-》链接-》执行
我们程序员编写的源程序在计算机内部执行是有过程的,先是编辑,然后是编译源码,编译是有顺序的,
都是从源文件的顶部即开头处开始编译,编译的过程就是把源码转换成01代码的过程,
编译以后生成的文件就是目标文件 ,然后在和系统的库函数进行链接,生成可执行文件.out文件
在我们的实际开发过程中我们通常需要显示源码的行号,这个在xcode本地就可以设置:performance选项卡中的
text editing 选项卡下勾选show lines number选项即可
程序编译和程序执行的顺序是有一定差别的,编译是从文件的顶部开始,逐行向下,执行的顺序是从主函数开始,
而不是程序顶部。在主函数内部嵌套调用了多个其他函数,这些被调用的函数也是从上到下挨个执行的,
所谓的链接就是把编译后生成的目标文件和系统的库函数进行整合,生成可执行的文件
同一作用域内函数不可以重名,否自系统不知道要调用哪一个函数的内容,同一个源文件中的函数,
即使没有被调用,在程序编译时也会一同被系统编译,但是一个函数没有调用就绝不会被执行
关键字简单的说就是系统提供给我们的表示特殊含义的单词,都是小写的,有32个,
在开发环境中都有特殊颜色,大部分都是紫褐色的字体,我们自己起的名字,要根据标识符的规定不可以和关键字
重名,标识符的命名有四条规定这是必须遵守的,另外还有一套规范:见文知意,驼峰标识法
注释是给程序员看的,方便程序员之间的沟通,记录思路,调试,排错,后期维护等
注释不参与编译
2.C语言的数据类型,变量,常量相关知识
我们的身高体重,存款数额,等都是数据,计算机就是拿来帮我们人处理各式各样的数据的存在,
因为能帮我们节省大量的时间,因此计算机能够蓬勃的发展。
我们将计算机中的数据大体分为两类:静态数据和动态数据
静态数据和动态数据的划分是按照数据的存储位置定义的
静态数据存储在硬盘里,即使断电了,数据依然会存在,长久存储的数据成为静态数据
动态数据是保存在内存中的数据,断电就消失了,从硬盘加载到内存中的数据,就是动态数据。
做开发主要处理内存中的数据
内存的容量是非常有限的,所以锱铢必较
合理的使用内存,不要让内存超载了,因为应用占用内存过大系统会强制关闭你的应用造成闪退
静态数据和动态数据的转换
比如播放本地视频都是从硬盘加载到内存在播放,这就是静态数据转化成动态数据
因为硬盘上直接读写的速度太慢了,所以要借助内存来转换静态数据和动态数据
内存这个中间环节不可避免,为了效率,而且内存比硬盘价格高很多
一个字节=8bit(8位)
1KB= 1024byte
1MB= 1024KB
...
.
程序员最需要关注的就是动态数据,因为动态数据是保存在计算机内存里的,
而我们程序员自己开发的应用程序就是运行在内存里的,程序在运行的过程中会产生各种各样的动态临时数据
为了方便数据的运算和操作,C语言对数据进行了类型的分类,提供了丰富的数据类型
C语言的数据类型大体分为以下几类:基本类型,构造类型,指针类型,定义类型,空类型
基本类型包括整型,字符型,浮点型(单精度,双精度)
C语言有丰富的数据类型,通常使用常量和变量来表示这些数据
所谓常量就是固定不变,不可改变的数据
所谓的整型就是整数,在计算机中去表示这些整数的类型,int 4个字节
所谓的浮点型,说通俗一点就是表示计算机中的小数,double(8个字节)&float(4个字节)
所谓的字符类型 char,内存中占1个字节,C语言中大概有120多个字符
字符在C语言中必须使用单引号括起来,如‘a’,‘*’等
我们可以把变量当做是保存程序数据的容器
想要保存一个数据,就要在内存中开辟一块内存用来保存当前的数据
定义变量:变量类型名+变量名;
float类型和int类型都是占4个字节的内存,为什么还要区分类型呢?
这是因为二者在内存中存储的格式是不一样的
为什么要进行变量的初始化呢?因为我们定义一个变量而不去初始化,
这时候变量对应的存储空间里保存的是一个随机值,也就是垃圾值,我们为了把不确定变成确定,
就人为的给变量赋初值,自己赋值当然可以覆盖掉原来的垃圾值,并且安全性更好
同一作用域里不能出现重名的变量,会引发错误,编译器不知道使用谁
变量的多种初始化方式
先定义后初始化 int a; a = 10;
定义和初始化同时进行 int a = 16;
部分初始化和全局初始化
int a,b,c,d;
a=b=c=d=10;
为什么要区分变量的类型呢?
为了更加合理的使用有限的内存
不同类型的变量开辟的内存大小是不一样的
存储方式和计算方式都不一样
变量的作用域
变量只有定义以后才能初始化,才能使用
变量的作用域是从定义这个变量的哪行代码开始知道遇到return 0 或者大括号结束为止
在相同的代码块内部不允许出现同名的变量
大括号内部的代码是可以使用大括号外部定义的同名的变量的,如果自己代码块内部直接使用而没有定义,
那么修改的就是外部定义的同名变量,前提是二者必须在同一作用域
外部代码块中不可以访问内部同名变量
整形的占位符是%d或者%i(int 的首字母)
浮点型float的占位符是%f默认保留6位小数
double类型的占位符是%lf默认保存14位小数
字符型的占位符是%c
%.2f这种形式的占位符意味着单精度浮点数小数点后保留2位小数,其余的都不输出
一般情况下我们在保留小数位数的操作上都是尽可能的保留少的小数位数,
少数的奇葩和神经病会故意保留和实际有效位数以外的,这样系统内部的一些操作会带来误差
double类型的浮点数故意存到float类型的变量中可能会损失精度,造成误差
%.2lf,双精度数据保留两位小数
printf函数的技术细节
%02d,2代表输出数据的位宽是2位,如果不足2位就是左边补零。
在百分号与d之间0N,N代表输出数字的宽度,如果宽度不够就在输出结果左边补上0.
如果你的实际输出宽度大于显限定的宽度,按实际值输出,不会被截断
如果是默认的情况下不使用0补齐,会在输出结果上左边补上空格
如果是%-2d是改成左对齐,右边补上空格
%m.nf,m代表包含小数点一共输出几位数字,小数点也算以为,n代表小数点后保留几位小数