int *a=new int(120);语句不是表示声明一个int类型的指针a,并分配一个内存地址,该地址存储的值为120吗?

来源:百度知道 编辑:UC知道 时间:2024/06/17 04:22:02
int *a=new int(120);语句不是表示声明一个int类型的指针a,并分配一个内存地址,该地址存储的值为120吗?

那又为什么a又可以当作数组用呢? 并且可以执行
for(int i=0; i<600; ++i) { a[i]=i; cout<<a[i]<<" ";}
而不会出现数组越界问题. 为什么??

请高手指点,最好尽量详细点.

指针指向的是内在地址,
可以把数组名看是指向数组首地址的一个指针,但是不可改变的,
指针和数组名的区别只不过是可变与不变的问题
如: int *a=new int(120);
int b[100]
完全可以用,a=b;

这时,a就指向了b所指向的地址,也就是b数组的首地址.
建议好好读也谭浩强的"c语言程序设计 指针",
搞懂下标"[]"寻址和"*"寻址,这个问题就一点儿也不难了.