指针
1.一个需要注意的硬件事项:边界对齐问题,在要求边界对齐的机器上,整型值存储的起始位置只能是某些特定的字节,通常是2或4的倍数。
2.名字与内存位置之间的关联并不是硬件所提供的,而是编译器为我们实现的,只是让我们用一种更加方便的方法记住地址,这些名字就是我们所称的变量。
3.不能通过检查一个值的位来判断它的类型,值的类型和值是由程序对值的使用方式决定的。
比如一段内存里面所存的二进制数据为:173159650(十进制表示)
当这段内存所表示的值为float类型是它的值为3.14
4.变量的值就是分配给该变量的内存位置所存储的数值,即使是指针变量也不例外。
5.一个常见的错误:
int *a;
*a = 12;
指针变量也是变量,声明一个指向整型的指针不会创建用于存储整型的内存空间,即*a的值将是一个非法地址
在对指针进行间接访问之前必须非常小心,确保它们已经被初始化。
6.NULL指针
NULL指针表示指针不指向任何东西,要使一个指针变量为NULL,可以给它赋0值。
对一个NULL指针进行间接引用操作是非法的。
对于一个指针,如果你知道指针的值该被初始化成什么地址,那就初始化,否则就将它初始化为NULL。
7.左值:一个有确定地址的变量才可以作为左值。
eg:char ch=‘a’; 当表达式&ch进行求值时,它的结果肯定会位于某个地方,但是你无法知道,所以是一个不合法的左值.&ch的值是ch的地址,是一个编译器确定的值,但是它的地址确实未知的。
8.指针运算
1)指针+-整数
标准定义这种形式只能用于指向数组中某个元素的指针。将指针向前或向后移动整数表示数值的数组元素的大小
2)指针-指针
只有当两个指针指向同一个数组的元素时,这个运算才是合法的。结果是两个指针在内存中的距离(以数组元素的大小为度量)。
3)关系运算
==,!=:所有的指针都可以进行这两个运算,因为蜘蛛女要么指向同一个地址,要么指向不同的地址。
<,<=,>,>=:当指针指向同一个数组的元素时。
9.对一个指针进行减法运算,使其非法的指向了数组第1个元素的位置(指针指向数组最后一个元素后面那个元素的位置是合法的)
阅读(1330) | 评论(4) | 转发(0) |