你的第一个问题,int *t, a; t = &a;是没有问题的。其实这2句就是等价于 int *t = new int; t = &a; 如果不给t其指向的地址,直接 *t = *p就会出错,因为都不知道t指向哪儿,*t怎么得到。所以int*t 声明了一个指针后,再给指针t一个地址让其指向,这里的a是一个乱七八糟的数,我们的目的只要是一个存储int型占4个字节的地址就行了,至于这个地址里原来放的是什么乱七八糟的都无所谓,所以只要把a的地址给t就行,不用给a赋值。
int *a; *a = 10;是错误的,因为你没有给指针a申请空间,你只是声明了一个指针而已。然后并没有空间,所以不能给a指向的空间赋值,可以这样写。int *a = new int; *a = 10就可以了。或是写成int *a = new int(); *a = 10;或是写成int* a = new int(10);