Dr. Khari Armih ([email protected]) Computer Language II June 24, 2023 2 / 14
Static Arrays • Special variable – group of variables have one name • Declaration: type name[int] • Array can be any type (int, float, char ......) • N elements, numbered from 0 to N-1
Dr. Khari Armih ([email protected]) Computer Language II June 24, 2023 3 / 14
Static Arrays • The Size can be given as: – non-negative integer, or – an expression that evaluates to a non-negative integer • e.g. int a[6]; - allocates 6 * 4 == 24 bytes • e.g. char b[6]; - allocates 6 * 1 == 6 bytes • e.g. double c[6]; - allocates 6 * 8 == 48 bytes
Dr. Khari Armih ([email protected]) Computer Language II June 24, 2023 4 / 14
Memory Allocation • Good programmers make efficient use of memory • Understanding memory allocation is important – Create data structures of arbitrary size – Avoid ”memory leaks” – Run-time performance
Dr. Khari Armih ([email protected]) Computer Language II June 24, 2023 5 / 14
Memory Allocation (cont.) • Static Allocation (fixed in size) – Sometimes we create data structures that are ”fixed” and don’t need to grow or shrink • Dynamic Allocation (change in size) – At other times, we want to increase and decrease the size of our data structures to accommodate changing needs • Often, real world problems mean that we don’t know how much space to declare, as the number needed will change over time.
Dr. Khari Armih ([email protected]) Computer Language II June 24, 2023 6 / 14
Static Allocation • Done at compile time • Global variables: variables declared ”ahead of time” such as fixed arrays • Lifetime = entire runtime of program • Advantage: efficient execution time • Disadvantage: – If we declare more static data space than we need, we waste space – If we declare less static space than we need, we are out of luck
Dr. Khari Armih ([email protected]) Computer Language II June 24, 2023 7 / 14
Dynamic Allocation • Done at run time • Data structures can grow and shrink to fit changing data requirements – We can allocate (create) additional storage whenever we need them – We can de-allocate (free/delete) dynamic space when ever we are done with them • Advantage: we can always have exactly the amount of space required - no more, no less • For example, we can use dynamic data structures to create a chain of data structures called a linked list
Dr. Khari Armih ([email protected]) Computer Language II June 24, 2023 8 / 14
Allocating Single Object • C++ uses the ”new” operator to dynamically allocate memory • The ”new” operator returns the address to the start of the allocated block • You use the new operator to allocate a memory location as follows:
<pointer-variable> = new <Data-type>;
• Where: – <Data-type> is any valid data type – <pointer-variable> is a pointer variable to hold the address of a variable with <Data-type>
Dr. Khari Armih ([email protected]) Computer Language II June 24, 2023 9 / 14
Allocating Single Object (cont.) • C++ uses the ”delete” operator to free memory allocated with new operator • The delete operator should be called on a pointer to dynamically allocated memory when it is no longer needed • We use the delete operator to allocate a memory location as follows:
delete <pointer-variable>; • After delete is called on a memory region, that region should no longer be accessed by the program
Dr. Khari Armih ([email protected]) Computer Language II June 24, 2023 10 / 14
Full Example 1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 // Pointer initialized with null 6 double * p = NULL; 7 // Request memory for the variable 8 p = new double ; 9 // Store value at allocated address 10 *p = 999.99; 11 cout << "Value of pvalue : " << *p << endl; 12 // free up the memory. 13 delete p; 14 return 0; 15 } Dr. Khari Armih ([email protected]) Computer Language II June 24, 2023 11 / 14 Dynamically Allocating Arrays • You can allocate an array of values as following:
<pointer-variable> = new <Data-type>[size];
• Example:
int *array = new int[100];
• The delete operator frees memory previously allocated. For arrays, you need to include empty brackets, as in
delete[] array;
Dr. Khari Armih ([email protected]) Computer Language II June 24, 2023 12 / 14
Full Example 1 #include<iostream> 2 using namespace std; 3 void printArray(int *p, int s) 4 { 5 for(int i=0; i<s; i++) 6 { 7 cout << p[i]; 8 } 9 } 10 int main() 11 { 12 int n; 13 cout << "Enter array size: "; 14 cin >> n; 15 // Request memory for the variable 16 int *array = new int[n]; 17 for(int i=0; i<n; i++) 18 { 19 array[i] = i; 20 } 21 printArray(array,n); 22 return 0; 23 } Dr. Khari Armih ([email protected]) Computer Language II June 24, 2023 13 / 14 lab 1 • Write a function createIndexArray(n) that returns an integer array of size n in which each element is initialized to its index. As an example, calling int * array = createIndexArray(20) • Write a function that create sub array int *subArray(int *array, int start, int end)
Dr. Khari Armih ([email protected]) Computer Language II June 24, 2023 14 / 14