int *p=new int[2]()是开辟一个8字节两个int型数据,并都初始化为0,p指向第一个数据地址;请问我的这些解释有错吗?如果没有,请问为什么对于这两种情况,delete p都可以,数组的不是应该要delete[] p吗?还有最严重的一个问题:int *p=new int;的意思应该是申请一个不指定大小的整形空间,我也用delete p,运行vs2010一般可以得到正确答案,但是结束时候就会弹出报错提示什么触发一个断点是什么意思?跪求答案
嗯,受教了,但是int *p=new int[2]();是可行的,这样就为p数组全部初始化为0了,应该是调用int的默认构造函数。。。吧,猜的。还有是为什么不能解引用p,就算p赋了值,&p也不能得到正确的值
追答1. 但是int *p=new int[2]();
C++中对基本类型当作对象来处理,可以有构造函数,传统C中没有。
2.还有是为什么不能解引用p,就算p赋了值,&p也不能得到正确的值
p是指针,你用 & 运算符是取地址,相当于取得指针p的存放地址,而不是取指针p存放的值,当然得不到正确的值。
*p 为取指针p存放的值。
嗯,3Q,关键的问题是我这样写语句:int *p=new int;主要是为了在输入的时候可以把值存在p[i]数组里,循环cin>>p[i],结尾也有delete[] p;关闭运行结果时会却会弹出报错框,但是运行的结果是对的?按道理p应该会随着输入次数的增加而依次开辟内存吧,最后的delete[] p是只delete一个数据指针吗难道(改成delete p也一样)。
int *p=new int;
你将有1个元素的数组。语句中可以用到 p[0]。没有 p[1],p[2],....
语句中可以用到 delete []p.
声明中 *p 是指针,
语句中,*p 是值,等同 p[0].
语句中,p 是地址。
嗯,没错,但是会随着输入元素的个数增加而有p[1],p[2]...吧,否则最后不可能输出1 3 6这个答案啊
追答p[1],p[2]... 实际上是一种地址计算。能输出1 3 6,是因为程序小,简单,让你用了这几个尚未派别的用途的地址,是不可靠的,没有分配给你。
本回答被提问者采纳