指针与数组
允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针比较。
指针进阶
1)二维数组首元素是第一行
2)int arr[10]={0};
Int (*parr)[10]=&arr;
//parr是指向数组的指针-存放的是数组的地址
结构体
1)结构是一些值的集合,这些值成为成员变量。结构的每个成员可以是不同类型的变量。
2)结构体传参时,要传结构体的地址
struct stu s=...
print1(s);//传值调用
print2(&s);//传址调用
//print2比1好,因为更省内存
调试
1)Debug版本(vs2019),包含调试信息
Release版本,进行了优化,运行速度快
2)查看断点/监视/自动/内存窗口
调试启动后,调试->窗口->断点
调用堆栈窗口可以查看函数调用情况
3) assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。
模拟实现字符串相关函数
1)const修饰变量,这个变量被称为常变量,不能被修改,但本质上还是变量
2)const若放在*左边,修饰的是*p,表示指针指向的内容不能通过指针改变,但指针变量本身可以修改
const若放在*右边,修饰的是*p,表示指针指向的内容能通过指针改变,指针变量本身不可以修改
3) extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。
错误类型
1)编译型错误:语法错误
链接型错误:一般是标识符名不存在或者拼写错误
运行时错误
数据的存储
1)栈区先使用高地址,再使用低地址,但数组随着下标的增长,地址是由低到高
2)计算机系统中数值用补码存储,因为使用补码可以将符号位和数值位统一处理