之所以说一级指针变量不能指向一级指针地址,我认为原因有两个,
第一,类型大小不匹配。(这个当然可以通过强制类型转换,不过不是全部都可以)类型的作用是表示地址开始后读取几个字节,char是1个,int是4个,double是8个,必须要类型大小匹配才行,指针的地址是4个字节,double *占有8个字节,char * 占有1个字节,int *占有4个字节。例如:
char n = 22;
char *p = &n;//取N的地址,到指针变量
int *a = (int *)&p;//这样的类型大小是匹配的
但是,由于下面的第二个原因,所以这个怎么用就要想想了
第二,访问深度不够。我们从二级指针的地址开始,有层层递进的深度:
二级指针地址-》二级指针内容(一级指针地址)-》一级指针内容(变量地址)-》变量
使用指针,我们的目的是为了间接的去修改变量的值,一级指针也能成功指向一级指针的地址,但是却最多到达的深度是变量的地址这一级别,不能更深的去访问变量,那么这个一级指针去指向一级指针地址,就没有什么实际意义,就如同数学上不能去除以0一样的,不是不能除,是除了也没有意义,再加上匹配的范围小,也就有了这种不能指向的说法。