C语言源代码转变成可执行程序的过程:
1.程序为什么要被编译器编译之后才能运行?
因为计算机能够识别的只有机器语言,机器语言就是由二进制0和1构成。所以为了让计算机执行我们写的程序,必须翻译成计算机能够识别的机器语言程序(目标程序)。
2.编译器把C语言程序转换成可以执行的机器码的过程做了什么?怎么做的?
1).预处理:展开头文件/宏替换/去掉注释/条件编译
2).编译:检查语法,生成汇编代码
3).汇编:把汇编代码转化成二进制的机器码
4).链接合成可执行的程序,并对声明在其他目标文件找到对应的定义
宏定义与typedef 关键字:
#define 定义宏,使用 #define 定义常量来增强可读性。
宏定义在C语言源程序中允许用一个标识符来表示一个字符串,称为“宏” ,被定义为“宏”的标识符称为“宏名”。
定义宏:#define 宏名 替换文本 (替换文本”可以是任意常数、表达式、字符串等。)
typedef 是 C 和 C++ 语言中的一个关键字,用于为现有的数据类型定义一个新的名称。 它通常用于简化复杂的类型声明或为某种类型创建更具描述性的名称。 typedef 并不创建新的数据类型,而是为现有的数据类型创建一个别名。
typedef 原数据类型 新数据类型;
宏定义与typedef的区别:
typedef:只能给现有的数据类型命名,不能给常量重命名,用处没有宏定义广泛
宏定义:可以给常量重命名(可以是任意常数,表达式,字符串等)
全局变量和局部变量
(1)在程序中,局部变量和全局变量的名称可以相同,但是在函数内,如果两个名字相同,会使用局部变量值,全局变量不会被使用。
(2)函数的参数,形式参数,被当作该函数内的局部变量,如果与全局变量同名它们会优先使用。(参数也是局部变量)
(3)当局部变量被定义时,系统不会对其初始化,必须自行对其初始化。定义全局变量时,系统会自动对其初始化,全局变量默认值 0(char:‘\0’,指针类型NULL)(能用全局变量就用全局变量->自动赋空值)
常量
常量:是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量 使用#define或者const声明(const 声明常量要在一个语句内完成)
字符的输入输出
scanf()和printf()函数 注意读入字符变量:用getchar()吞回车或者空格
运算符
1./ 整除(向下取整)
2.++ 自增 a++ ++a区别
3.-- 自减 同上
4.三目运算符 ?: 位操作符:直接对二进制位进行操作
5.<< 左移 a<<x a左移x位,左移一位相当于乘2
6.>> 右移
7.~取反
8.|按位或 有1为1
9.&按位与 同1为1 通常用来对某些位清0或保留某些位 例:a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)
10.^按位异或 不同为1
实现两个值的交换,而不必使用临时变量。
例如交换两个整数a=10100001,b=00000110的值,可通过下列语句实现:
a = a^b; //a=10100111
b = b^a; //b=10100001
a = a^b; //a=00000110