算不上类型不同.
你理解引用的时候不要把它理解成变量名.
int a;
先看下这个a在内存中的做法,内存中要为a分配4个数据段.如:
0x000001,0x000002,0x000003,0x000004
那么,&a就等于0x000001
指针只能指向地址,如果用int *i=a 那就错了.a是变量的名字不是一段地址.
从程序的角度,当遇到一个变量名的时候,会从代码区找到它所在的数据区的地址,以便来工作.(系统→变量名→是否为const,是的话不去找地址→查找变量名对应的地址→修改,或者直接返回代码区被定义过的值)
但指针就不用了,指针告诉它这里是数据区的一段地址.(系统→指针→得到指针地址→修改)
说白了,指针危险也就危险在这.它甚至可以指向代码区的地址,系统不在乎是否对错.直接修改你的值.
int a,b;
//a的地址是 0x000001,0x000002,0x000003,0x000004 的这段
//b的地址是 0x000005,0x000006,0x000007,0x000008 的这段
int *i=0x000003;
问题来了,这个是整型指针,系统同样要默认为其分配4个地址,但地址却在2个变量的中间,一但i被给值,2个变量的值都被改变.
-------------------------------------------------------------------
对于第二个问题,的确是自分配,但算不上new关键字.
它那段地址的变量名默认改成a了(被编译成汇编时,被一段标志取代)
这个已经没有什么意义.反正空间已经被占.又不能通过a来改值,指针又不需要变量名.可以说这段标志没有用了.