Presentation is loading. Please wait.

Presentation is loading. Please wait.

CEG 221 Lesson 2: Homogeneous Data Types Mr. David Lippa.

Similar presentations


Presentation on theme: "CEG 221 Lesson 2: Homogeneous Data Types Mr. David Lippa."— Presentation transcript:

1 CEG 221 Lesson 2: Homogeneous Data Types Mr. David Lippa

2 Overview Review of Homogeneous Data Types & Their Applications –Arrays –Data structures that we will briefly cover today, and in more detail later in the term: Lists – an ordinary unordered list Stacks – a “stack of plates” Queues – a line of people Questions

3 What is a Homogeneous Data Type? A Homogeneous data type is a data type that is comprised solely of one type of data –Examples: An array of integers (just a collection) An (un)ordered list of integers A stack of struct ProcessType* (an OS environment of running processes) A queue of struct PersonType (ie. A line in the store or at Disneyland)

4 Arrays Arrays are a homogeneous data type that is the most basic collection of members of the same data types in chunks –Statically Allocated – hard-coded number of elements Example: double pArray[15]; –Dynamically Allocated – variable number of elements, with malloc/free (from stdlib.h) Example: double *pArray = malloc( 15 * sizeof(double) ); Both examples are 15 doubles – but you have to allocate memory for everything you are storing at once time; cannot grow when full

5 Statically Allocated Arrays The number of members allocated in a statically allocated array is constant, determined at compile time. Advantages: easy to initialize arrays of basic types to “0”; memory freed when array goes out of scope; results in larger executables –double pArray[15] = {0}; Disadvantages: fixed number of elements (using a constant); always allocates memory whether it is used or not

6 Creating Statically Allocated Arrays: Examples An initialized array of 15 ints: –int pArray[15] = {0}; // each int initialized to 0 A character string of 15 characters: –char pArray [16] = { ‘\0’ }; –always null terminated with ‘\0’ An initialized array of 15 people: –struct PersonType pArray [15]; // allocate –for (i = 0; i < 15; i++) { /* initialize values*/ }

7 Dynamically Allocated Arrays The number of members allocated in a dynamically allocated array can be determined by any value – a constant or a variable. Advantages: requires a memset for any variables to initialize values to “0”; results in smaller executables –double *pArray = malloc( 15 * sizeof(double) ); // decl –memset( pArray, 0, 15 * sizeof(double) ); // init Disadvantages: programmer must free memory when done or results in a memory leak; poor knowledge of pointers results in unstable code

8 Creating Dynamically Allocated Arrays: Examples An initialized array of 15 ints: –int *pArray = malloc( 15 * sizeof(int) ); –memset( pArray, 0, 15 * sizeof(int) ); A character string of 15 characters: –char *pArray = malloc(16); –memset( pArray, 0, 16 ); An initialized array of 15 people: –struct PersonType *pPerson = malloc( 15 * sizeof(struct PersonType) ); –for (i = 0; i < 15; i++) { /* initialize values*/ } Remember to free(pArray) when done and checking to see if pArray is NULL (allocation failed) before using it!

9 Accessing Arrays To access an array, use the [] operator: –Indices go from 0 to n-1, where n is the size –The i th position starts from 0, not 1 The value at position 4 is the 5 th element in the array The 5 th element of pArray is pArray[4] Remember when using a dynamically allocated array, check to see if it is NULL

10 Reading/Writing Statically Allocated Arrays To write a statically allocated character array to disk: char buf[360] = {‘0’}; … fwrite(&buf[0], sizeof(char), 360, pOutputFile); Remember statically allocated arrays –are not accessible when out of scope –Are always passed by reference

11 Reading/Writing Dynamically Allocated Arrays –fwrite(buf, sizeof(char), 360, pOutputFile); buf is a void* sizeof(TYPE) 360 – the number of items being written pOutputFile – output stream Remember –that all arrays are POINTERS –to check for ordinary pointers (ie. char*) if they are NULL prior to using them

12 Deleting Dynamically Allocated Arrays Dynamically allocated arrays are not deleted for you, as other types are You must instruct the program to delete it with the command free and then set it to NULL so that no other function can dereference a NULL pointer (results in crash) Example: free(pPerson); pPerson = NULL;

13 Putting it all together Declare an array (& allocate memory if needed) Initialize its values to 0 (or some empty value) … Set the elements of the array Use the elements of the array … (When done, free memory if needed)

14 Arrays: Putting it all together { int numElements = 5; int *pIntList = malloc( numElements * sizeof(int) ); double pDoubList[5] = {0}; int i = 0; // populate both lists with needed values // use both arrays free(pIntList); }

15 Next Time Advanced Input/Output Advanced Data Types Advanced Programming String Processing using

16 QUESTIONS?


Download ppt "CEG 221 Lesson 2: Homogeneous Data Types Mr. David Lippa."

Similar presentations


Ads by Google