C++的指针知识可为及其重要的基础,如果不懂得指针的用法,那看C++的源码程序就太难了。C++的指针知识是个难点,必须克服的难点。
指针声明:
1.每个数据类型都有指针类型
int* i
char* c
2.指针本来也是一种类型,指针可以对应着指针类型即二级指针变量
int** i 即 (int*)* i【int指针类型的指针i】
3.一个*只能修饰一个指针
int* i,p 【i为指针,p为int变量】
要想一下声明多个指针,则可以:int* i,*p
指针赋值:
1.指针也可以初始化,赋值或初始化的值是同类型实体(即实体变量)的地址
int i=10;
int* ip=&i (&表示实体的地址)
int* ipt=&10 是不可以的,10是实体,而不认可具有空间地址(所以说是实体变量地址才有效)
2.指针直接赋实体值
int i=10;
int* ip=&i;
int* ipt=10 不可以,指针初始化必须是实体地址
*ip=20 可以,指针间访操作
这里的*ip为什么能直接给实体值呢?
因为*ip是所指向实体地址的间访操作,也就是指针指向实体的时候是可以读写操作的。其实这里还是赋值的地址。
3.空指针不能赋实体值
int* ip;
*ip=10 不可以
这里的*ip为什么又不能给实体值了呢?
因为这里的指针*ip没有经过初始化,*ip没有指向实体,为空指针,则就不能读写了。
指针间的操作
当指针指向具体实体后,指针也就有了具体的实体值和具体的空间地址,这时候就可以被二级指针所操作
int i=10;
int* ip=&10;
int** iip=&ip;
理解了上面的指针赋值,那么其余的指针间操作就好操作了,必须理解清楚指针在各种情况下的表示。
给指针赋值,必须是个地址,各种形式的赋值只是表现出的形式不一样,实际指针只能指向实体的地址。指针在赋值时必须是与指针类型相同的类型实体地址。但实 际的存储空间的实体都是以二进制数进行存储的,那么当一个float的实体地址被一个int指针指向时,这个float实体就会被强制转换为int实体, 那么数据就出现变动。这是危险的。我理解的是,指针不能在类型不同时进行转换。
今天就到此了,明天还要继续。天,有点想发狂的冲动,还有指针运算、限定、引用,函数指针。头都要大了...