指针赋值:
指针的初始化、赋值是同类型实体(即实体变量)的地址
int i=10;
int* ip=&i (&表示实体的地址)
int* ipt=&10是不可以的,10是实体,而不认可具有空间地址(所以说是实体变量地址才有效,也就是说将某一个const的变量赋值给指针同样是不对的。。。)
指针直接赋实体值
int i=10;
int* ip=&i;
int* ipt=10 不可以,指针初始化必须是实体地址
但是*ip=20是可以,指针间接访问地址操作(即指针访问的并不是整形变量20,而是整型变量20的地址)
这里的*ip为什么能直接给实体值呢?
因为*ip是所指向实体地址的间接访问操作,也就是指针指向实体的时候是可以读写操作的。其实这里还是赋值的地址。
空指针不能赋实体值
int* ip;
*ip=10 不可以
这里的*ip为什么又不能给实体值了呢?
因为这里的指针*ip没有经过初始化,*ip没有指向实体,为空指针,则就不能读写了。
指针间的操作
当指针指向具体实体后,指针也就有了具体的实体值和具体的空间地址,这时候就可以被二级指针所操作
int i=10;
int* ip=&10;
int** iip=&ip;
理解了上面的指针赋值,那么其余的指针间操作就好操作了,必须理解清楚指针在各种情况下的表示。
给指针赋值,必须是个地址,各种形式的赋值只是表现出的形式不一样,实际指针只能指向实体的地址。
指针在赋值时必须是与指针类型相同的类型实体地址。
但实际的存储空间的实体都是以二进制数进行存储的,那么当一个float的实体地址被一个int指针指向时,这个float实体就会被强制转换为int实体,那么数据就出现变动,很容易出错。