为什么在真正的C ++编程中我们真的需要指针

时间:2018-09-21 12:29:41

标签: c++ arrays pointers dynamic allocation

我不能真正理解动态分配和静态分配之间的区别,他们说动态分配在执行程序时发生,而静态分配仅在编译时发生,而我们在执行时不能手动分配,但是

#include <iostream>
using namespace std;
int main()
{
   int size , a = 0;

   cout << "Enter the size of Array: ";
   cin >> size;

   int A[size][size];
   for(int i = 0 ; i < size ; i++)
   {
        for(int j = 0 ; j < size ; j++)
            cout << a++ << '\t';
        cout << endl;
    }

    system("pause");
    return 0;
}

该程序将在执行时分配数组大小。

1 个答案:

答案 0 :(得分:3)

动态分配的真正目的是控制分配对象的生命周期。动态分配的对象一直存在,直到您取消分配它们为止。它实际上与数组没有任何关系,尽管通常是初学者首先要学习分配的情况。

考虑这两个功能

int* bad()
{
    int x = 123;
    return &x;
}

int* good()
{
    int* x = new int(123);
    return x;
}

两个函数都创建一个int并返回一个指向该int的指针。

bad函数不正确,因为x变量在函数退出时被破坏,因此它返回指向已被破坏的对象的指针。

good函数动态创建一个int,该对象永远不会被破坏(除非程序将其删除)。所以这个功能是正确的。

偶然地,int size; ... int A[size][size];不是合法的C ++。一些编译器允许这样做,而其他编译器则不允许。