// rememb-o-matic
#include <iostream>
#include <new>
using namespace std;
int main ()
{
int i,n;
int * p;
cout << "How many numbers would you like to type? ";
cin >> i;
p= new (nothrow) int [i];
if (p == 0)
cout << "Error: memory could not be allocated";
else
{
for (n=0; n<i; n++)
{
cout << "Enter number: ";
cin >> p[n];
}
cout << "You have entered: ";
for (n=0; n<i; n++)
cout << p[n] << ", ";
delete[] p;
}
return 0;
}
现在,
为什么他们的括号包含在变量i?
中 p= new (nothrow) int [i];
为什么他们的2 for
语句和for
语句完全相同?
为什么删除[] p而不是变量p
?
答案 0 :(得分:5)
为什么他们的括号包含在变量i中? &amp;
为什么删除[] p而不是变量p?
p= new (nothrow) int [i];
动态分配int
个i
元素数组。
delete []p;
删除动态分配的数组。
C ++中动态分配的基本规则是:
new
动态分配内存,请使用delete
取消分配内存。new []
动态分配内存,请使用delete []
取消分配内存。另外,请注意您正在使用nothrow
运算符的new
版本,如果出现某些错误情况并且不抛出异常,它基本上会返回null
,这允许C ++代码与内存分配后使用空检查的遗留c代码兼容(malloc在失败时返回null)。
for
语句究竟做了什么?
for语句是条件循环构造,它继续执行循环,直到condition
保持为真。 for循环的基本语法是:
for(;condition;)
{
//doSomething
}
为什么他们的2个陈述?
代码中的第一个for loop
获取用户的输入。它需要输入i
次。
第二个for loop
打印出数组的内容。
建议您选择 good C++ book 并阅读基础知识以了解更多信息。
答案 1 :(得分:2)
delete []意味着你将一个数组释放回系统,if语句的无括号是可选的,只是意味着第一行将被执行如果为true,我认为你真的需要学习一些基础知识C ++和编程一般,得到一本好书或谷歌教程那里有很多好的
答案 2 :(得分:2)
这只是C ++语法。
new int [i]
表示我们要分配内存来存储i个整数。delete [] p
删除对p的内存绑定。如果省略[]
,则编译器假定p指向*p
类型的单个实例。如果指令包括[]
编译器尝试删除元素数组。