int *q = new int[3];

q表示指针指向的地址,&q表示指针本身的地址。

int main()
{
int ret = 0;
int *a = new int[3];
int *c = new int[4];

int *b = a;
printf("%6x %6x %6x %6x\n", &a, a, &b, b);

delete a;
delete c;
printf("%6x %6x %6x %6x\n", &a, a, &c, c);

a = NULL;
c = NULL;
printf("%6x %6x %6x %6x\n", &a, a, &c, c);

printf("%6x %6x\n", &b, b);
}

指针地址与指针指向的地址_c语言

其中红色代表指针本身的地址,绿色代表指针指向的地址,int *b =  a,即a和b指向同一块内存,当delete a后,a会指向8123一固定地址,只有赋NULL后才指向0地址,a指针释放后,b指针还在,程序结束后由系统自动销毁。