1、内存中的每个位置都由一个独一无二的地址标识,内存中的每个位置都包含一个值;
2、硬件是通过地址来访问内存的;
3、不能简单地通过检查一个值的位来判断它的类型,判断一个值的类型应该根据值的使用方式来确定;
4、对指针进行间接访问时,应保证指针已经被初始化;
6、引起段错误原因是引用非法地址,总线错误原因是数据在内存中的存储地址处在错误的边界上;
7、对一个NULL指针进行解引用的操作是非法的,在对指针进行解引用操作之前,首先必须确保它不是NULL指针;
8、间接访问操作只能作用于指针类型的表达式。要实现如下的功能:
*100 = 25;
则必须进行强制转换:
*(int *)100 = 25;
9、&ch能够作为一个右值来使用,但是不能用来当左值来使用,至于原因:我们知道左值意味着位置,&操作符的的结果应该放在哪个位置,肯定位于一个地方,但是你无法知道在什么地方,因此这个表达式并未标识内存的位置,所以无法作为一个合法的左值;
由此可知,作为一个左值,必须要有对它的存储位置有个清晰的定义(关于左值,右值在上一章有提到);
10、在函数内,如果传进来一个指针,应该对其进行检查是否是NULL指针;
11、C的指针算术运算只限于两种形式:
(1)指针 加或减 整数
(2)指针 - 指针(当两个指针都指向同一个数组的的元素时,才允许一个指针减去另一个指针)
这种情况下,运算后结果为两个指针在内存中的距离(以数组元素长度为单位);
如果两个指针所指向的不是同一个数组中的元素,那么它们之间相减的结果是未定义的;
12、指针之间还可以进行关系运算,任何指针之间都可以进行比较,测试它们相等或不相等,如果两个指针都指向同一个数组中的元素,那么它们之间还可以执行<,<=,>,>=等关系运算,用于判断它们在数组中的相对位置,对于两个不相关的的指针执行关系运算,其结果都是未定义的;
13、声明一个指针变量不会自动分配任何内存