C ++程序员需要一些帮助

时间:2011-08-01 19:07:36

标签: c++

 // 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

3 个答案:

答案 0 :(得分:5)

为什么他们的括号包含在变量i中? &amp;
为什么删除[] p而不是变量p?

 p= new (nothrow) int [i];

动态分配inti元素数组。

 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 ++语法。

  1. new int [i]表示我们要分配内存来存储i个整数。
  2. delete [] p删除对p的内存绑定。如果省略[],则编译器假定p指向*p类型的单个实例。如果指令包括[]编译器尝试删除元素数组。