C语言指针的奇怪有关问题,大家来帮忙

C语言指针的奇怪问题,大家来帮忙
测试代码如下:
  /*环境:windows,dev-cpp:orwell 5.2.03,compliler:MinGW GCC 4.6.2 32-bit
  red hat linux9,kdevelop 3.3.4,compiler:GCC 4.1.2 32-bit*/
//以下代码均无编译错误
int i=9;
int * pt=&i;
int (*pa)[3];
int ar1[2][3];
int ar2[3][2];
int **ppt;
 *ppt=pt;//该行改成ppt=&pt,则运行不出现255错误。为什么?
 printf("\n*ppt=%p,ppt=%p,pt=%p,ppt=%d",*ppt,ppt,pt,**ppt);
 int * p1=&i;
 const int * p2;
 const int ** pp2;
 p2=p1;
 pp2=&p2;
  printf("\n*pp2=%p,pp2=%p,p1=%p,pp2=%d",*pp2,pp2,p1,**pp2);
  *p1=2;
printf("\n*pp2=%p,pp2=%p,p1=%p,pp2=%d",*pp2,pp2,p1,**pp2);
  //pp2=&p1;
  //*p1=3;
  *pp2=p1;//这行可以写成pp2=&p1或者*pp2=p1,都不出现运行错误
 printf("\n*pp2=%p,pp2=%p,p1=%p,pp2=%d",*pp2,pp2,p1,**pp2);

这是为什么?请哪位大师来解答我的疑问。。。。

------解决方案--------------------
指针要同级别.
*ppt=pt;//该行改成ppt=&pt,则运行不出现255错误。为什么?
*ppt是指向int*的指针.pt是指向int的指针.
------解决方案--------------------
*ppt=pt;
ppt是个变量,但是*ppt不知道是个啥?
------解决方案--------------------
1.int **ppt;
 *ppt=pt;//该行改成ppt=&pt,则运行不出现255错误。为什么?

因为int **ppt; ppt 是一个指向指针的指针, 因为最开始的时候ppt未初始化 所以ppt是个野指针 修改野指针指向地方的值就可能会出错。

2.
*pp2=p1;//这行可以写成pp2=&p1或者*pp2=p1,都不出现运行错误

因为上面 pp2=&p2; pp2已经指向p2了所以*pp2 = p1 等于修改p2的值(const表明p2的值是可变的,*p2是不可变的) 所以不会出错。 
pp2 = &p1的话就是让pp2指向p1也不会出现运行错误 


------解决方案--------------------
因为,pt是指向整型数据的指针,pt存放的是i的地址;ppt是指向指针pt的指针,也就是指针的指针,ppt存放pt的地址,你写的是*ppt = pt,是不正确的,因为pt是存放i的地址,不是pt本身的,,pt的地址是&pt,应该写作*ppt = &pt,
------解决方案--------------------
我也是刚学的,打一打酱油,不正确帮小弟指正,主要以学习为目的。
------解决方案--------------------
C/C++ code
#include <stdio.h>
int main()
{
    int i = 10;
    int * a_test = &i;
    int * b_test;//这句是b_test的声明
    b_test = &i;
    * b_test = i;
    return 0;
}
//看这个就知道了,原因是b_test类型被声明了,是int * 类型,局部变量,堆栈中给b_test分配内存
//而* b_test会解释成一个int变量,而该变量并没有分配内存。
//你用 b_test = new int[0];
//就可以了,

------解决方案--------------------
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!