Зачем нам действительно нужны указатели в программировании, особенно на C ++ - PullRequest
0 голосов
/ 21 сентября 2018

Я не могу понять разницу между динамическим и статическим размещением, они говорят, что динамическое выделение происходит при выполнении программы и статическое только при компиляции, и мы не можем выделить вручную при выполнении, но,

#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 голосов
/ 21 сентября 2018

Реальная точка динамического размещения состоит в том, что вы контролируете время жизни объектов, которые выделяются.Динамически распределяемые объекты существуют, пока вы не освободите их.На самом деле это не имеет ничего общего с массивами, хотя это часто тот контекст, в котором новичков впервые учат распределению.

Рассмотрим эти две функции

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 ++.Некоторые компиляторы позволяют это, но другие компиляторы этого не делают.

...