arrays: ------- ordered, homogenous collection of data actual size vs effective size declaring and accessing array buckets: float farray[30]; farray[4] = 6.3; // index must be an int passing arrays to functions: passes base addr of array argument always pass array's effective size int foo(int array[], int size) 2D arrays: int array[ROWS][COLS]; array[i][j] = 7; function prototype w/2D must specify the column dimension: void foo(int array[][COLS], int num_rows); sorting and searching: should be able to implement simple sorts given a description of their algorithm (ex. bubble, selection) should know linear and binary search should be able to say something about the complexity of search and sort algorithms (big-O) pointers: --------- declaring pointer variables, & operator, * dereferencing operator int *p, x; p = &x; // p points to x *p = 6; // store the value 6 in the location pointed to by p pass by reference: pass address of argument function parameter is pointer to function argument parameter's type is pointer to argument's type dynamic memory allocation: malloc, free, heap memory vs. stack memory int *arr, i; arr = malloc(sizeof(int)*10); // dynamically allocated array of 10 ints if(arr != NULL) { for(i=0; i < 10; i++) { // use the dynamically alloced array arr[i] = 0; } ... free(arr); // free heap space when done using it } pointer arithmetic: you should be able to trace through something like this: int array[10]; int *ptr; ptr = array; // or ptr = &(array[0]); for(i=0; i < 10; i++) { printf("%d\n", *ptr); ptr++; } char: ----- know that chars are encoded as numeric values using ASCII encoding know that '0'-'9', 'a'-'z', 'A'-'Z' are contiguous (you do not need to know their ASCII values) char ch; for(ch = 'a'; ch < 'z'; ch++) { printf("%c", ch); } ch = getchar(); // read in a character from stdin know what ctype.h functions do: toupper, isdigit, etc. ------- string: an array of characters with special '\0' terminating character ------- (functions that take a string parameter don't need to be passed the effective size of the string because they can find the end of the string by its terminating '\0' char) // these can store strings of length 29 or less // (need extra char for '\0') char str1[30]; // a statically declared string char *str2; // a dynamically declared string str2 = malloc(sizeof(char)*30); strcpy(str1, "Jo Schmoe"); // strcpy adds '\0' to end of string strcpy(str2, "Joseph Schmoe"); printf("%s %s", str1, str2); // to read in a string, need to read in one char at a time i=0; ch = getchar(); while(ch != '\n') { // read in a line from stdin if(i < 30) { str2[i] = ch; i++; } } str2[i] = '\0'; know what the string.h functions do: strcpy, strcat, strlen, strcmp, etc. -------- **I will give you function prototypes from string.h and ctype.h on the exam, so you don't need to memorize the prototypes, but you should know what the functions do and how they are called so that you can use them in code you write or trace through DO NOT USE the Book Library GetLine function, String Library functions, or string type on the exam (we have not talked about any of these in class).