C程序设计笔记(V1.06)
一、C语言执行流程:
1、在C语言中,一个C语言源程序需要经过编译、连接和执行三个过程。其中编译是指将源程序(*,c)翻译成二进制形式的目标程序(*.obj),连接是指将目标程序与系统的函数库或用户自定义的目标程序连接起来形成可执行的目标程序(*.exe)。
2、C语言程序如何在Dos环境下运行:
从上图我们可以看出CL命令实现了DOS环境下的编译和连接,在执行时只需直接输入文件名就可以了。(这个过程有点类似于java程序在Dos中的运行)
3、至于Linux下C语言程序的运行,将会在Linux C中介绍。
C语言中的数据读取与强制转换:
printf函数中的格式符规定了如何从内存中取数据,如%d表示从内存中取出两个字节(或四个字节)的数据并显示出来,因此,在利用printf输出数据时,一定要选好输出格式,在这个地方是不存在数据类型转换的。(注意:在printf语句中,float会自动转换成double类型!)
C++中类型长度: char(1字节)
表达式运算符的优先级、结合性与求值顺序
优先级
优先级主要用来指定相邻的不同操作符的求值顺序。下面是C/C++里面基本的各类运算符的优先级排列:
【向左结合】
【向左结合】
【向左结合】
结合性
结合性主要用来指定优先级相同的两个相邻操作符的求值顺序。由上图可以看出,唯有単目、条件和赋值运算符在表达式的计算过程中遵循左结合的法则,其他的全部是右结合!
求值顺序
有了优先级和结合性,并不能完全解决表达式计算顺序的确定性问题,如:a*b+c*d+e*f,这里没有规则要求那个乘法运算式子先进行计算,优先级在这个地方是不起作用的。因此,这还与操作数的计算顺序有关,但在C语言中,并没有规定所有操作数的求值顺序,而在java语言中,其求值顺序是固定的,即从左向右。也就说,C/C++在这个问题上更加灵活,因此,凡是需要求值顺序才能确定顺序的表达式是不具有可移植性的。
但是,要特别注意的是,C/C++中特定对几个运算符设置了求值顺序,即&&,||,?:和逗号运算符。
数组、指针
数组
分类问题:
按照不同的分类方法,数组可以分成不同类别。常见的分类方法有:按维数,按数组元素类型,空间分配方式(静态或动态)等。
数组中的基本语法:
(1)数组同结构体一样,也是属于复合数据类型,它是有一些相同类型的元素组成,里面的元素,可以是基本类型,也可以为复合类型,如结构体数组。定义一个静态数组后,编译器会为数组分配指定大小的相邻连续的存储空间。另外需要注意的是,数组下标是从0开始的,但是与java语言不同的是,C编译器并不对数组的越界错误进行检查,而且会编译通过并自动生成一个垃圾值。
【延伸】如何改变C语言默认从0开始读取数据的规则?
(2)一维数组、二维数组的