C和指针读书笔记——指针

1、内存中的每个位置都由一个独一无二的地址标识,内存中的每个位置都包含一个值;

2、硬件是通过地址来访问内存的;

3、不能简单地通过检查一个值的位来判断它的类型,判断一个值的类型应该根据值的使用方式来确定;

4、对指针进行间接访问时,应保证指针已经被初始化;

6、引起段错误原因是引用非法地址,总线错误原因是数据在内存中的存储地址处在错误的边界上;

7、对一个NULL指针进行解引用的操作是非法的,在对指针进行解引用操作之前,首先必须确保它不是NULL指针;

8、间接访问操作只能作用于指针类型的表达式。要实现如下的功能:

*100 = 25;
则必须进行强制转换:

*(int *)100 = 25;
9、&ch能够作为一个右值来使用,但是不能用来当左值来使用,至于原因:我们知道左值意味着位置,&操作符的的结果应该放在哪个位置,肯定位于一个地方,但是你无法知道在什么地方,因此这个表达式并未标识内存的位置,所以无法作为一个合法的左值;

     由此可知,作为一个左值,必须要有对它的存储位置有个清晰的定义(关于左值,右值在上一章有提到);

10、在函数内,如果传进来一个指针,应该对其进行检查是否是NULL指针;

11、C的指针算术运算只限于两种形式:

(1)指针 加或减 整数

(2)指针 - 指针(当两个指针都指向同一个数组的的元素时,才允许一个指针减去另一个指针)

      这种情况下,运算后结果为两个指针在内存中的距离(以数组元素长度为单位);

如果两个指针所指向的不是同一个数组中的元素,那么它们之间相减的结果是未定义的;

12、指针之间还可以进行关系运算,任何指针之间都可以进行比较,测试它们相等或不相等,如果两个指针都指向同一个数组中的元素,那么它们之间还可以执行<,<=,>,>=等关系运算,用于判断它们在数组中的相对位置,对于两个不相关的的指针执行关系运算,其结果都是未定义的;

13、声明一个指针变量不会自动分配任何内存

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值