指针是一个有解释信息的地址。void*表示没有类型,没有类型本身就是一种信息。
解引用运算符*跟上指针变量,表示间接访问指针指向的数据。
16位时代有near(短指针,16位)和far(长指针,32位)之分,如今near和far都定义成空宏了,32位里没有区别。
定义指针*号最好与变量名连一起,如果类型与*号连着,给他人阅读可能发生误导导致岐义(只对人,编译器不影响)。另外定义指针时规范要给初值,没有合适初值给NULL。
同一个地址,使用不同类型的指针,解释出的结果不同。
指针没有隐式转换。
有符号数字节扩展,扩展部分同符号位。
指针运算法则:
加法:
指针 + 整型 = (int)指针 + sizeof(指针类型)*整型值
相加后返回的类型还是指针。计算方式类似数组,区别是指针加法运算后不取内容,下标运算会取内容。
减法:
指针1(同类型) – 指针2(同类型) = ((int)指针1-(int)指针2)/sizeof(指针类型)
相减后返回的类型是整型。