DAY_01
1.1 stdlib.h // 包含 malloc() free()等函数
system(“pause”); //暂停
return EXIT_SUCCESS; //返回 正常退出值
1.2 typedef //给类型起别名
用法: typedef 原名 别名
1.3 数据类型区别
typeid();
char _p1,p2; //p1为char _;p2为char
char _p1;_p2; //都为char *类型
2
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 修改变量
- int a = 10;
a = 20;
- 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.宏函数
在一定程度上,宏函数会比一般函数效率高
define ADD(x,y) x + y
int sum = ADD(10;20);
2.函数的入栈出栈过程
3.调用惯例
所以函数隐藏了 __cdecl
int ADD(x,y) x+y
= int __cdecl ADD(x,y) x+y
4.函数变量的传递分析
main函数在栈区或堆区的变量,所有子函数都能用
5.栈的生长方向和内存分配方向
int a; //栈底 高地址
int b;
int c; //栈顶 低地址
0xaabbccdd
aa 高字节放在高地址
6.空指针和野指针
1.不允许向NULL和非法地址赋值
空指针可以释放
野指针不可以
7.指针的步长
内存拷贝
memcpy(buf,&a,sizeof(int)) //1.目标2.地址3.大小
8.指针的意义 间接赋值
指针做函数参数的输入特性和输出特性
9.字符串
1.如果 char str[] = {‘’,‘’,‘’,‘\0’};
找到\0就结束,需加‘\0’
2.如果数组未全定义,默认为零
3.sizeof() 有统计 \0
strlen() 无 只统计有定义的 遇到\0就结束
4.字符串的拷贝
5.字符串反转
6.字符串的格式化输出
DAY_03
1.calloc和realloc
calloc 和malloc区别 malloc无初始化 calloc 初始化为0
realloc 重新分配空间