Dynamic Memory Allocation, Shallow & Deep Copy, Array


Task 1:

Code

#include <iostream>
using namespace std;

int main()
{
    int *firstArray;
    int *secondArray;

    firstArray = new int[10];

    for (int i = 0i < 10i++)
    {
        firstArray[i] = i + 1;
    }
    
    cout << "Shallow Copy" << endl;

    secondArray = firstArray; //shallow copy

    for (int i = 0i < 10i++)
    {
        cout << secondArray[i<< " ";
    }

    delete [] firstArray; //second array also become invalid
    
    cout << endl << "Deep Copy" << endl;

    firstArray = new int[10];
    secondArray = new int[10];

    for (int i = 0i < 10i++)
    {
        firstArray[i] = i+1;
    }

    for (int j = 0j < 10j++) //deep copy
    {
        secondArray[j] = firstArray[j];
    }

    delete[] firstArray; //second array remains valid
    
    for (int i = 0i < 10i++)
    {
        cout << secondArray[i<< " ";
    }
    
    return 0;
}

Output

Shallow Copy
1 2 3 4 5 6 7 8 9 10 
Deep Copy
1 2 3 4 5 6 7 8 9 10


Task 02:

Code

#include<iostream>
using namespace std;

int main(){
    int value1 = 25;
    intptr1;
    int** pptr1;

    ptr1 = &value1;
    pptr1 = &ptr1;

    cout << value1 << " " << *ptr1 << " " << **pptr1 << endl << endl;

    int value2 = 15;
    intptr2;
    int** pptr2;

    ptr2 = &value2;
    pptr2 = &ptr2;

    cout << value2 << " " << *ptr2 << " " << **pptr2 << endl << endl;

    ptr2 = ptr1; //updating ptr2 with ptr1

    cout << value2 << " " << *ptr2 << " " << **pptr2 << endl << endl;

    return 0;
}

Output

25 25 25

15 15 15

15 25 25


Task 03:

Code

#include<iostream>
using namespace std;

int main(){
    int** myArray = new int* [5];
    
    for (int i = 0i < 5i++)
    {
        myArray[i] = new int[5];
    }

    for (int j = 0j < 10j++)
    {
        myArray[j] = new int[10];
    }

    for (int i = 0i < 5i++)
    {
        for (int j = 0j < 10j++)
        {
            myArray[i][j] = i+j+1;
        }
        
    }
    cout << endl;

    for (int i = 0i < 5i++)  //using array index
    {
        for (int j = 0j < 10j++)
        {
            cout << myArray[i][j<< " ";
        }
        cout << endl;
    }
    cout << endl << endl;

    for (int i = 0i < 5i++) //using pointers
    {
        for (int j = 0j < 10j++)
        {
            cout << *(*(myArray+i)+j<< " ";
        }
        cout << endl;
    }
    cout << endl << endl;
    
    return 0;
}

Output

1 2 3 4 5 6 7 8 9 10 
2 3 4 5 6 7 8 9 10 11 
3 4 5 6 7 8 9 10 11 12 
4 5 6 7 8 9 10 11 12 13 
5 6 7 8 9 10 11 12 13 14 


1 2 3 4 5 6 7 8 9 10
2 3 4 5 6 7 8 9 10 11
3 4 5 6 7 8 9 10 11 12
4 5 6 7 8 9 10 11 12 13
5 6 7 8 9 10 11 12 13 14