理解使用" new int []"的目的

时间:2014-03-21 16:27:35

标签: c++ pointers stack heap

#include "stdafx.h"
using namespace std;
#include <iostream>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;

//Search program
 void read_data(int* , int); //array address, size
int seq_search(int , int* , int);//key,array address,size
int binary_search(int , int* , int);

void main(void)
{
int  *arr , size , ans , key ;
cout << "Please enter the size: ";
cin >> size ;
arr = new int[size] ;
read_data(arr , size);
cout << "Enter the number to search for: ";
cin >> key ;
ans = binary_search(key, arr , size);
if(ans == -1)   
    cout << "The number " << key << " does not exist \n";
else    
    cout << "The number " << key << " exists at location " << ans << endl;
getch();
}

void read_data(int *pt , int ss)
{
cout << "Please enter " << ss << " numbers: \n";
for(int k = 0 ; k < ss ; k++)
{
    cout << "Enter the " << k + 1 << " number: " ;
    cin >> pt[k] ;
}
}

int seq_search(int num , int a[] , int s)
{
for(int k = 0 ; k < s ; k++)
    if(num == a[k])     { return k ; }
return -1 ;
}

int binary_search(int num , int a[] , int s)
{
int first , last , mid ;
first = 0 ;     last = s -1 ;
while(first <= last)
{
    mid = (first + last) / 2 ;
    if(num == a[mid])               return mid ;
    else if(num > a[mid])       first = mid + 1 ;
    else                                    
last   = mid - 1 ;
}
return -1;
}

从我的理解(我是一个真正的初学者)是例如* P = a;指向整数a和p =%a的地址;是a的引用或实际地址。

我明白我们使用这个新的int来在程序中的任何地方使用数组,因为它在main完成后被销毁,但为什么我不在main之外声明它以便在任何地方使用?

2 个答案:

答案 0 :(得分:1)

  

我明白我们使用这个新的int是为了在程序中的每个地方使用数组,因为它在main完成后被销毁,但为什么我不在main之外声明它以便在任何地方使用?

无论谁告诉你这样的事情都会全心全意地恨你。相信我。

您通常不想使用newnew运算符动态分配内存,当main存在(程序结束)时,作为最后的手段将被销毁,即使我不确定这实际上是否有保证。但动态分配的内存不是delete d会导致内存泄漏,这在程序中可能非常危险。

大多数情况下,有更好的方法来处理动态分配的资源和动态大小的数组(在这种情况下为std::vector)。

只需阅读good book on C++并了解newdelete的实际含义,以及为什么要避免使用它们。

答案 1 :(得分:0)

要在main之外声明它,你必须在编译时知道数组的大小