C语言概述及数据表示

一、如何学好C语言

1. TIOBE

指令能力:解析处理顺序、分支、循环程序的能力

CPU:进行指令的解析与执行,即处理数据

  • 解析指令能力很强
  • 存储指令与数据的能力很弱

GPU:存储大,计算强,用于机器学习这种不复杂但量大的计算

  • 指令能力不强(处理分支、循环(这种逻辑)程序的能力不强)
  • 存储能力强,数量多

编程围绕着:找数据,表示数据,操作数据(找读改写)等行为。

C语言非常灵活,被发明出来就是为了帮助人们直接操控硬件、处理数据的。

  • 找:C语言提供了变量名(相当于给地址起了个外号,可以理解为:在编译时就吧变量名替换成了地址了)和指针(地址、无名的内存)两种方式找数据。

2. C语言学习路线

标黑为数据结构所需要掌握的。

  • C语言表示数据:主要表示数据的容量,例如int、char、有无符号数等
  • C语言操作数据:算术运算、位运算、分支、循环
  • C语言找到数据:地址 指针
int *p;          // 开辟一块名为p的空间,它回答了用多大空间存储地址,怎么用这个地址访问空间
int *p[5];       // 开辟连续的5个空间,使用p访问第一个空间。每个空间都存着“钥匙”(而不是数据),用于指向其他的空间。
int (*p)[5];     // 不加括号的话,p[5]的优先级高于*。为了让地址是5个([]里的数字)5个地访问,要把*p用()括起来,让它们成为一个整体。
int *p(int);     //
int (*p)(int);   // 
char **p;        // p往右边看没东西,看左边,第一个*告诉它这是“一把钥匙”,第二个*告诉它这把钥匙要开的门里面装的还是“一把钥匙”。
  • C语言数据管理:分段
    栈->堆->bss段->data段->rodata段->text段
  • C语言的模块化设计思想:函数——承上启下 模块衔接
  • C语言编译流程

二、C语言的数据表示

赋值=:逐位拷贝

int p1;  //用一个基础数据类型,叫int,在内存中圈了一块区域,用p1来标记这个区域
  • 圈多大?任何编程语言(几乎所有)都要支持圈地的大小,即数据类型
  • 数据类型 : char、short、int、long等
  • 提出这些数据类型的目的:约束圈地的范围,C 提供了一个sizeof的关键字来查看这些地的大小。总之就是,定义一个变量时,只是告诉系统我要用多大的一块地。至于后面该怎么去拷贝(赋值)、解码等,那就是后面的事了
  • 这些数据类型没有确定的大小,而只是规定了它们的关系,这就导致各厂家的编译器有不同之处。
    char < short <= int <= long其中char必为1,long最少为4B。
    面试中问int a; sizeof(a) = ?,要回答不确定(与当前系统环境有关)。

printf("%d %u")printf相当于一个解码器,把内存中相同的内容按照不同的方式(%d、%u等)解码输出。

SUFE大二在读