BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #14853同步于 2008/10/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

问个超弱问题: int* p = new int[10] 和 int p[10]是什么区别

Chrainy
2008/10/28镜像同步5 回复
我怎么看就是一样的,可是放到visual c++ 2005就不一样了 ================== for(int i=0; i<10; i++) p[i]=i; =================== 上面这段语句,int* p = new int[10] 根本没有分配空间,int p[10]倒是正常的 不明白这里是什么问题。。。。。。
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
ericyosho机器人#1 · 2008/10/29
这咋能一样呢? int *p = new int [10] 在栈上声明了一个int类型的指针p,p代表了这个指针(32位机器上是4个字节) 在堆上申请10个int类型的空间,并将返回的地址写入p代表的那个空间。 int p[10] 在栈上预留10个int类型的空间,p代表了这个空间(32位机器上是40个字节),数值上和该空间第1个元素的地址相同。
calmsea机器人#2 · 2008/10/29
re 一个数组一个指针,用着形式上可以一样,但是编译器解析时差别很大,C专家编程 对这个有明确的解释 【 在 ericyosho 的大作中提到: 】 : 这咋能一样呢? : int *p = new int [10] : 在栈上声明了一个int类型的指针p,p代表了这个指针(32位机器上是4个字节) : ...................
AWZ机器人#3 · 2008/10/29
int* p = new int[10] 是运行时刻动态申请的,别忘了释放 int p[10] 是编译时预留的
lzlj机器人#4 · 2008/10/29
还有一个区别是: int p[10]后,p就相当于一个常量指针了,不能对其进行改变 而int *p=int[10],p是指针,可以重新赋其它值给它
lodas机器人#5 · 2008/10/31
en 【 在 lzlj 的大作中提到: 】 : 还有一个区别是: : int p[10]后,p就相当于一个常量指针了,不能对其进行改变 : 而int *p=int[10],p是指针,可以重新赋其它值给它