C语言相关

扫码查看

标准输入输出

格式化输入输出

字符数据的输入输出

预处理命令

变量:

变量的存在性(可见性)

变量的生存周期

数组名&指针:

我们都知道一维数组的时候,数组名字指代数组第一个元素的地址,类似于一个指针。

比如,定义int a[10]; 我们就知道 a==&a[0];  *(a+i)==a[i];  a类似于一个指向int的指针变量,a+1在地址上实际是a+1*sizeof(int)。

同理,定义完int a[10][10]; 我们就知道 a==&a[0];  a[0]==&a[0][0].

a[0]类似于一个指向int的指针变量,a[0]+1在地址上实际是a[0]+1*sizeof(int)。

a类似于一个指向"整个"int[10]的指针变量,a+1在地址上实际是a+1*10*sizeof(int)。

这里不容易理解的地方在于,a[i]在数学上是存在且有数字的,他的值就是:&a[i][0],同时也是:*(a+i);但是在物理上却是不存在的。

*(a+i)的实际意义,其实不是“指针变量a[i]”,而是以a[i]起头的一维数组“a[i][0]...a[i][9]”的首地址。

这是由“数组的定义”定义的,所以说a类似于一个指向指针的指针,但是实际上并不是,它是一个数组的一部分,就是数组的首地址。不要完全按照指针去理解。

当然,指向指针的指针也可以定义动态二维数组。

int** a;
a=new int*[n];
for(int i=;i<n;i++)
a[i]=new int[m];

这里的每个*(a+i)就是有物理存储的了。和静态数组的区别在于:

1,多了n个变量来存放二级指针。(缺点)

2,可以不连续存储。(优点)

分支结构:

?表达式(条件运算符)

if语句

switch语句

循环结构:

自增/自减运算符

while和do_while语句

break&continue语句

for语句

指针:

一个翻译C语言成人话的网站:https://cdecl.org/

看到一个巨无敌的读变量声明的方法叫做“右左震荡法”
(来源:http://ieng9.ucsd.edu/~cs30x/rt_lt.rule.html

就是说:

0,见到如下符号就进行替换

- "[]" == "一个数组,他的每个元素是"

- "()" == "一个函数,它的返回值是"

- "*" == "一个指针,指向"

1,找到变量;

2,往右看,直到表达式结束或者遇到一个右括号。

3,往左看,直到表达式开头或者遇到一个左括号。

重复23,直到全部扫完。

举个例子:

动态申请回收资源:

指针函数:

自定义数据结构

struct结构体

结构体指针

union共同体/联合体

enum枚举类型

typedef声明新类型名

sizeof函数,返回变量或者数据类型的大小(字节为单位)

字节对齐(百度面试遇到的.....)

文件操作

文件顺序读写

以二进制方式读写文件

随机读写数据文件(常用于二进制文件的读写)

05-17 06:27
查看更多