DAY_01

1.1 stdlib.h // 包含 malloc() free()等函数

system(“pause”); //暂停

return EXIT_SUCCESS; //返回 正常退出值

1.2 typedef //给类型起别名

用法: typedef 原名 别名

1.3 数据类型区别

  1. typeid();
  2. char _p1,p2; //p1为char _;p2为char
  3. char _p1;_p2; //都为char *类型

2

  1. void a= 10 //直接报错;无法分配内存

void func(){} //用于限定返回值类型

int func(void){} //限定函数参数列表

void *p ; //万能指针,不需要强类型转换

3 sizeof()不是一个函数,而是一个操作符

对于变量,可以不加()

它的返回值 unsigned int

一个unsigned int和int运算会转化为unsigned int

可以统计数组长度 int arr[]; sizeof(arr);

当arr[]当成一个函数参数时,只传递首地址指针,

void func(arr[]){

sizeof(arr); //显示4,指针占4个字节

}

4 修改变量

  1. int a = 10;

a = 20;

  1. int *p = &a;

*p = 20;

3.struct stu p1 = {……..};

p1.d = …;

4.struct stu *p = &p1;

p->d = 200;

5 内存空间分配

1.代码区 一般是共享的,只读的

2.全局初始化数据区 已经初始化的全局变量等

3.未初始化数据区 有定义,未初始化的数据

4.栈区 先进后出,由编译器自动分配

5.堆区 大容器,自己动态分配 malloc() free()

运行前,有代码区1,和数据区2,3

运行后,有栈区4和堆区5

6 在栈区

注意不要返回局部变量的地址

在堆区

手动分配记得手动释放

memset(temp,0,100)

含义:把temp里100单位设成0

如果主调函数没有给指针分配内存,被调函数的

同级指针是修饰不到主调函数的指针的;需要用

到高级指针

7 static和extern的区别

static int a = 10;//静态变量,编译阶段分配内存;只能

在文件内使用

extern int a = 10;//全局变量,属于外部链接属性,默认

被隐藏,可以在文件外使用加上extern int a;

8.const修饰的全局变量和局部变量

全局变量:不可被修改,运行时受常量区的保护

局部变量:不能直接修改

放在栈区,可通过指针修改,伪常量

9.字符串常量

char * p1 = “hello,world”;

char * p2 = “hello,world”;

在VS下p1.p2和&”hello,world”地址一样

p1[3] = ‘Z’; 在VS下不可以修改,有些可以

DAY_02

1.宏函数

1.C语言提高 - 图1

在一定程度上,宏函数会比一般函数效率高

define ADD(x,y) x + y

int sum = ADD(10;20);

2.函数的入栈出栈过程

1.C语言提高 - 图2

1.C语言提高 - 图3

3.调用惯例

1.C语言提高 - 图4

1.C语言提高 - 图5

所以函数隐藏了 __cdecl

int ADD(x,y) x+y

= int __cdecl ADD(x,y) x+y

4.函数变量的传递分析

main函数在栈区或堆区的变量,所有子函数都能用

1.C语言提高 - 图6

1.C语言提高 - 图7

1.C语言提高 - 图8

1.C语言提高 - 图9

1.C语言提高 - 图10

1.C语言提高 - 图11

5.栈的生长方向和内存分配方向

int a; //栈底 高地址

int b;

int c; //栈顶 低地址

0xaabbccdd

aa 高字节放在高地址

6.空指针和野指针

1.不允许向NULL和非法地址赋值

  1. 1.C语言提高 - 图12

1.C语言提高 - 图13

空指针可以释放

野指针不可以

7.指针的步长

1.C语言提高 - 图14

内存拷贝

memcpy(buf,&a,sizeof(int)) //1.目标2.地址3.大小

1.C语言提高 - 图15

1.C语言提高 - 图16

1.C语言提高 - 图17

1.C语言提高 - 图18

8.指针的意义 间接赋值

1.C语言提高 - 图19

指针做函数参数的输入特性和输出特性

1.C语言提高 - 图20

1.C语言提高 - 图21

9.字符串

1.如果 char str[] = {‘’,‘’,‘’,‘\0’};

找到\0就结束,需加‘\0’

2.如果数组未全定义,默认为零

3.sizeof() 有统计 \0

strlen() 无 只统计有定义的 遇到\0就结束

4.字符串的拷贝

1.C语言提高 - 图22

1.C语言提高 - 图23

1.C语言提高 - 图24

5.字符串反转

1.C语言提高 - 图25

1.C语言提高 - 图26

6.字符串的格式化输出

1.C语言提高 - 图27

1.C语言提高 - 图28

DAY_03

1.calloc和realloc

calloc 和malloc区别 malloc无初始化 calloc 初始化为0

realloc 重新分配空间

1.C语言提高 - 图29

1.C语言提高 - 图30