300 likes | 311 Views
This review covers the concepts of arrays, pointers, and structures, including their declaration, initialization, passing to functions, sorting algorithms, multidimensional arrays, and self-referential structures.
E N D
Review for Final Exam Dilshad M. Shahid @ NYU
In this review • Arrays • Pointers • Structures • Java - some basic information
Arrays • Homogeneous - can only hold data of one type. • Arrays occupy contiguous (the elements are literally right next to each other) space in physical memory Values in array Array size (or length) = total number of elements 24 13 2 9 -3 6 10 -19 0 1 2 3 4 5 6 7 Subscript (starts at zero in C) Highest subscript = size - 1
Arrays • Declaring arrays: • int a[6]; Size of array Data type that array will hold Name of array
Arrays • Other examples: • float b[10]; • char words[15]; • Initializing arrays: • int a[6] = {12, 4, -9, 0, 5, 1}; • If fewer initializers than total number of elements in array, the rest are initialized to zero Number of initializers must equal or be less than size of array otherwise compilation error
Arrays • Usually use for loops in array processing. Size of array is fixed so you know when to stop looping through the array. • #define is used to specify size of array • Examples on web and in homework solutions
Arrays • Character arrays are a little different. • Can use them for strings (i.e. words like “Dilshad” or “hello”) • Strings end with the null termination character \0
Arrays • Arrays are passed to functions by simulated call by reference. • So changes to array elements made inside a function occur in the original location in memory • Arrays do not have to be passed back to main() for changes to be updated • Arrays can be very large so using call by value (working with copies of variables) to pass arrays to functions would be a waste of space and time
Arrays • Sorting information stored inside arrays has been an area of computer science research where many famous algorithms have originated • One algorithm is the Bubble Sort, so called because smaller values “bubble” their way to the top of the array - key section is the swapping • Examples on web and in text
Arrays • A much faster and famous algorithm is the Quick Sort • The Quick Sort algorithm won the Turing prize (the equivalent of the Nobel prize for computer science) • The code is much harder than that for the Bubble Sort
Arrays • Multidimensional arrays • For a double subscripted array can think of a table layout with rows and columns • Declaring a 3 by 4 array called n: • int n[3][4]; row column
Arrays • When passing double subscripted array to a function, must specify column size (in function prototype also) • int func1(int [][4]); /* prototype */ • int func1(int n[][4]) { • /* code here */ • } In function definition, must give name of array
Pointers • Pointers hold values representing memory locations • Pointers are defined by the data type they “point” to • examples: int *a, float *b; • char *c;
Pointers • Please refer to slides on pointers and handout on pointers posted on the web. • Final thoughts: • pointers are used to simulate call by reference • almost interchangeable with arrays (the name of an array is itself a pointer to the array). See example on web and in text. • please read text on pointer arithmetic, very clear explanation given there
Structures • Structures are collections of related variables which may be of different data types • Structures are heterogeneous • Derived data types - structures are made of up objects of other types
Structures • Example: • struct person { • char name[30]; • int age; • char gender; • float salary; • }; members Keyword Structure tag
Structures • To declare an instance of a struct: • struct person a; • Think of the struct as a template or a cookie cutter. The name of the cookie cutter is “person” • You would use this “person” cookie cutter to create a cookie called “a” a name age gender salary
Structures • You can have an array of structs • struct person people[5]; Each one is of type struct person people name name name name name age age age age age Array name gender gender gender gender gender salary salary salary salary salary 0 1 2 3 4 Array subscripts
Structures • You can have a pointer to struct • struct person *p; name age 5040 gender p salary Memory location: 5040
Structures • A structure cannot contain an instance of itself • But you can have, as a member of the structure, a pointer that points to that structure • For example:
Structures • struct person2 { • char name[30]; • int age; • char gender; • float salary; • struct person2 *q; • } a, b; • Graphically: A structure containing a member that is a pointer to the same structure type is called a self-referential structure name struct person2 a age gender salary This situation has to be explicitly set up but is possible with this kind of struct struct person2 b q
Structures • Self referential structures are used to create linked data structures like linked lists and binary trees • So you would need two things to create dynamic data structures: pointers and structures
Structures • Initializing structures • One way: • struct person a = {“Dilshad”, 25, ‘F’, 1000000.0}; • If fewer initializers in list than members in the structure, remaining members are automatically initialized to zero (or NULL if the member is a pointer)
Structures • Accessing members of a structures • Two ways (and two operators): • use the structure member operator (.) also called the dot operator • use the structure pointer operator (->) also called the arrow operator
Structures • struct person a; • struct person *p; • p = &a; /* setting p to point to address of a */ • /* using the dot operator, direct access */ • a.name = “Dilshad”; • a.age = 25; • a.gender = ‘F’; • a.salary = 1000000.0; • /* using the arrow operator, equivalent to above */ • p->name = “Dilshad”; • p->age = 25; • p->gender = ‘F’; • p->salary = 1000000.0;
Structures • /* Another example using array of structures */ • struct person people[5]; • int i; /* for loop counter */ • /* using the dot operator, direct access */ • /* initializing entire array of structures with the following information */ • for (i=0; i < 5; i++) { • people[i].name = “Dilshad”; • people[i].age = 25; • people[i].gender = ‘F’; • people[i].salary = 1000000.0; • }
Structures • /* Another example using array of structures */ • struct person people[5]; • struct person *p; • int count=0; • p = people; /* setting pointer to point to array */ • /* I don’t need the & in front of people because the name of an array is itself a pointer to the array */ • /* initializing entire array of structures with the following information */ • while (count < 5) { • p->name = “Dilshad”; • p->age = 25; • p->gender = ‘F’; • p->salary = 1000000.0; • count++; /* to keep track of where I am in the array */ • p++; /* incrementing pointer to the next structure in array */ • }
Java • One of the hottest programming languages around today - believe the hype • Came from C and C++. Syntax is very similar to C • Developed by James Gosling, VP at Sun Microsystems, to correct the shortcomings of C and C++
Java • Java is object-oriented which means it takes the cookie cutter/cookie analogy as its basic philosophy • In C, we saw how related data was put into a structure • In object-oriented design, data and specific functions used to manipulate the data (and only that data) are put together in a class
Java • See “Why is Java important?” and all the 5 points on the Java slides on the webpage • See “Future of Java” on the Java slides on the webpage