之前的笔记搬运
地址和指针有什么区别?
地址是指内存单元编号, 通过这个这个编号, 可以定位到这个内存块
指针是指带有类型解释的地址, 通过地址找到位置, 并读出多少字节数据
指针如何定义和获取读取指针?
(要读取的类型) * 指针名称
读取指针: *指针名称
获取指针: &变量名称
指针的大小怎么确定?
指针的大小取决与CPU和编译程序的位数, 如果是16位的程序指针大小为2字节,
如果是32位的程序指针大小为4字节, 如果是64位的程序指针大小为8字节,
指针的宽度越大, 代表可执行程序可以访问的内存空间越多
指针的寻址公式:
type * p; p + n == (int) p + sizeof(type) * n ,
我们发现指针的寻址公式和数组的寻址公式很像, p[n] == *((int) p + sizeof(type) *
n ) , 其实指针和数组的寻址公式基本一样, 只是数组多了一层取值而已
数组和指针有什么区别?
上面说到数组和指针的寻址方式几乎一样, 那两者有什么本质的区别呢?
区别就是数组的首地址是常量值, 不可更改的, 而指针是变量, 可以随时赋值,
也可以说数组的首地址就是指针常量, 这就是两者的区别
指针为什么有的地方读取会出错?
因为文件在内存中运行时会有许多区块, 每一个区别都会有内存属性, 分别分为:
W(writeable可写) R(readable可读) E(executable可执行) S(shareable可共享),
如果指针写入了不可写区域, 或是读向了不可读的区域, 程序就会崩溃出错
零散笔记:
“stdafh.h”是公共头文件, 该头文件申明必须放在第一行, 如果放在其他头文件声明,
可能会造成未知错误
在”tchar.h”的头文件里, 已经使用宏替换把标准字符和宽字符整合了, 在使用时,
只需要在头部使用 tchar.h文件声明, 在函数和字符串前加上 “t”的标识符,
编译在预处理就会根据编译环境, 自动选择MBCS字符,
还是Unicode的字符(MBCS代表多字符集, Unicode代表宽字符), 如printf 改 \tprintf,
scanf 改 __tscanf, “123” 改 __t(“123”)
在使用操作符 ”&*” 对变量进行操作时, 编译器会在编译的时候把这个操作给优化掉,
因为是无意义的