C语言第一课——C语言概述


1. 总线

数据总线    在CPU和RAM之间来回传送数据

地址总线    用来指定在RAM之中储存的数据的地址

控制总线    将微处理器控制单元的信号,传送到周边设备

         三者统称系统总线 

计算机五大部件

(1) 运算器 :也叫算数逻辑单元,完成对数据的各种常规运算,如加减乘除,也包括逻
辑运算,移位,比较等。
(2) 控制器 :它是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证
计算机按照预先规定的目标和步骤有条不紊地进行操作及处理。
(3) 存储器 :存储程序和各种数据。
(4) 输入设备 :把人所熟悉的信息如,图片,声音,文字,转换为计算机能够识别的信
息存储起来。
(5) 输出设备 : 把计算机机能识别的信息转换为人能识别的信息,进行呈现。

2. C语言编译链接过程

 hello.cpp(源文件)—预编译

—hello.i(预编译文件)—编译

—hello.obj(目标文件)—链接

—hello.exe(可执行文件)

预编译阶段
a) 删除所有的“#define”,并且展开所有的宏定义;
b) 处理所有的条件预编译指令,“#if”、“#ifdef”、“#endif”等;
c) 处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置;
d) 删除所有的注释;
e) 添加行号和文件名标识,以便于编译器产生调试用的符号信息及编译时产生编译错
误和警告时显示行号;
f) 保留所有的#pragma 编译器指令,因为编译器需要使用它们。


 编译阶段
词法分析、语法分析、语义分析,代码优化,汇总符号。


3 汇编阶段
 将汇编指令翻译成二进制格式,生成各个 section,生成符号表。


4 链接阶段
a) 合并各个 section,调整 section 的起始位移和段大小,合并符号表,进行符号解析,
给符号分配虚拟地址
b) 符号重定位

  有生命周期->> 进程

分配内存和CPU

内存

分为代码区  数据区  堆  栈

              .text       .data       .heap     .stack

注意  凡是在函数之外定义的变量(全局变量)全部都在  .data区域()                                 

         定义的局部变量会在函数被执行的时候在栈区分配内存

          通过 malloc函数向堆区申请空间

          全局变量的可见范围是从定义全局变量的下方开始

在C语言中  .c/.cpp源文件(文本),  .h头文件(文本),  .i预编译文件(文本),.s汇编文件, 

        .o/.obj 二进制目标文件    .exe 可执行文件


3.进制以及其转换

二进制 八进制  十进制  十六进制

128  64   32  16  8  4   2  1

出现一个十进制数可以先从左到右比较   原数大于开头数  就取一   以此类推


4.

C语言  是一个  强类型语言      生来如此,类型一旦被确定永远不会被改变,定义是整型那就一辈子都是 整型,定义是double那就永远是double

             模块化语言   每一个模块就是一个函数,函数时最小执行单位,函数中不可以再定义函数但是可以去调用其他函数

     C语言规范  C20标准

一个C语言源程序可以有一个或者多个源文件组成 ,每个源文件也可以有一个或者多个函数组成,但是一个源程序只能有一个main函数  也就是主函数。

  


数据类型的大小————融入血液

  sizof ——  用来计算变量或数据类型所占字节个数

char     1bit

short     2

int          4

long  int  4

long  long   8

float        4

double     8

long   double   8

bool      1


变量  即可读(可获取可取值)也可写

局部变量: 在函数中定义的变量

全局变量:  在函数外定义的变量

局部变量要是和全局变量同名,  局部优先

定义  为一个变量分配一块内存 并且取名   

声明  告诉编译器 这个名字已经匹配到内存或者  这个名字已经被预定别的不能再使用

  区别  : 声明没有分配内存空间,而定义分配了


int        sun       =   10

类型名  初始化数据字面常量  标识符变量名


常量  只可读不可写

1.字面常量

2.用#define定义的宏常量

3.用const关键字修饰的变量——常变量

4.枚举常量

5. 字符常量和字符串常量

例:


#include

//宏常量  在预编译时执行 .cpp---.i

#define PI  3.14

//枚举常量

enum  week{red=1.yellow=2,green=3}

int main()

{

   const int a=1 ;//用const 修饰的常变量   不可被改变

    int   b=2;  //  2为字面常量

   enum  week  s=red;//枚举常量

   s= a*a*PI;   // 宏常量

  return  0;

}


字符常量,字符串常量

单引号是字符的定界符

双引号是字符串的定界符

转义字符

\a  响铃符

\b 退格符将当前位置移到前一列

\f 换页符

\n

\r 回车符 将当前位置移到本行开头

\t 水平制表符 向右移动四个字节单位

\v  垂直制表符

\\  代表一个反斜线字符

\' 代表一个单引号

\''代表一个双引号

\? 代表一个问号

\0 空字符

\000  八进制

\xhh  十六进制

注意:当你要定义一个字符储存  单引号双引号 斜杠 问号字符的时候 在  ''中间加入一个/即可