2011-08-01 20 views
0
// 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; 
} 

现在,研究员C++程序员需要一些帮助

为什么他们的支架装在变量i?

p= new (nothrow) int [i]; 

为什么他们2所for陈述又是什么一个for声明做什么呢?

为什么它会删除[] p而不是变量p

+10

如果你需要询问有关循环,那么你可能应该[在C++上阅读一本好书](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list )。而这段代码很糟糕。 –

+1

也许一本介绍C++的书会是一个好的开始?在这里有一个很好的建议清单。 –

回答

5

他们为什么把括号括在变量i中? &
为什么它删除[] p而不是变量p?

p= new (nothrow) int [i]; 

动态分配一个int阵列i元件。

delete []p; 

删除动态分配的数组。动态分配的用C


基本规则++是:

  • 如果使用new动态分配内存,使用delete释放它。
  • 如果您使用new []动态分配内存,请使用delete []取消分配它。

另外请注意,您正在使用nothrow版本new运营商,它基本上返回null如果一些错误条件并没有抛出异常,这使得C++代码必须与传统兼容内存分配后使用空检查的c代码(malloc在失败时返回null)。


请问一个for声明做什么呢?

一种说法是条件循环构建,这将继续执行循环,直到该condition仍是如此。 for循环的基本语法是:

for(;condition;) 
{ 
    //doSomething 
} 

为什么他们2发言?
代码中的第一个for loop从用户处获取输入。它需要输入i次。

第二个for loop打印出数组的内容。


建议你拿起good C++ book,并通过基本看明白了。

2

delete []意味着您将数组释放回系统,if语句的无括号是可选的,并且意味着第一行将被执行(如果为true),我认为您确实需要学习一些基本知识在C + +和一般编程,得到一本好书或谷歌教程有很多好的那里

2

这只是C++语法。

  1. new int [i]意味着我们要分配内存来我店整数。
  2. delete [] p删除内存绑定到页。如果省略了[],则编译器假定p指向*p类型的单个实例。如果指令包含[],编译器会尝试删除元素数组。