inst eecs berkeley edu cs61c CS61C Machine Structures Lecture 3 C Strings Arrays Malloc 2007 06 27 Review All declarations go at the beginning of each function Only 0 and NULL evaluate to FALSE Scott Beamer Instructor Sun announces new supercomputer Sun Constellation All data is in memory Each memory location has an address to use to refer to it and a value stored in it A pointer is a C version of the address follows a pointer to its value gets the address of a value CS61C L3 C Pointers 1 Beamer Summer 2007 UCB CS61C L3 C Pointers 2 Beamer Summer 2007 UCB Has there been an update to ANSI C Pointers Allocation 1 2 Yes It s called the C99 or C9x std After declaring a pointer Thanks to Jason Spence for the tip References http en wikipedia org wiki Standard C library http home tiscalinet ch t wolf tw c c9x changes html Highlights inttypes h convert integer types 38 stdbool h for boolean logic def s 35 restrict keyword for optimizations 30 int ptr ptr doesn t actually point to anything yet We can either make it point to something that already exists or allocate room in memory for something new that it will point to later Named initializers 17 for aggregate objs CS61C L3 C Pointers 3 Beamer Summer 2007 UCB CS61C L3 C Pointers 4 Beamer Summer 2007 UCB Pointers Allocation 2 2 More C Pointer Dangers Pointing to something that already exists Declaring a pointer just allocates space to hold the pointer it does not allocate something to be pointed to int ptr var1 var2 var1 5 ptr var1 var2 ptr Local variables in C are not initialized they may contain anything var1 and var2 have room implicitly allocated for them ptr CS61C L3 C Pointers 5 var1 5 var2 What does the following code do void f int ptr ptr 5 5 Beamer Summer 2007 UCB CS61C L3 C Pointers 6 Beamer Summer 2007 UCB Arrays 1 6 Arrays 2 6 Declaration int ar 2 Arrays are almost identical to pointers declares a 2 element integer array int ar 795 635 declares and fills a 2 elt integer array Accessing elements ar num char string and char string are nearly identical declarations They differ in very subtle ways incrementing declaration of filled arrays Key Concept An array variable is a pointer to the first element returns the numth element CS61C L3 C Pointers 7 Beamer Summer 2007 UCB CS61C L3 C Pointers 8 Beamer Summer 2007 UCB Arrays 3 6 Arrays 4 6 Consequences Array size n want to access from 0 to n 1 but test for exit by comparing to address one element past the array ar is an array variable but looks like a pointer in many respects though not all ar 0 is the same as ar ar 2 is the same as ar 2 We can use pointer arithmetic to access arrays more conveniently Declared arrays are only allocated while the scope is valid char foo char string 32 return string is incorrect CS61C L3 C Pointers 9 int ar 10 p q sum 0 p ar 0 q ar 10 while p q sum sum p p p 1 sum p Is this legal C defines that one element past end of array must be a valid address i e not cause an bus error or address error Beamer Summer 2007 UCB CS61C L3 C Pointers 10 Beamer Summer 2007 UCB Arrays 5 6 Arrays 6 6 Array size n want to access from 0 to n 1 so you should use counter AND utilize a constant for declaration incr Pitfall An array in C does not know its own length bounds not checked Wrong int i ar 10 for i 0 i 10 i Right define ARRAY SIZE 10 int i a ARRAY SIZE for i 0 i ARRAY SIZE i Why SINGLE SOURCE OF TRUTH You re utilizing indirection and avoiding maintaining two copies of the number 10 CS61C L3 C Pointers 11 Beamer Summer 2007 UCB Consequence We can accidentally access off the end of an array Consequence We must pass the array and its size to a procedure which is going to traverse it Segmentation faults and bus errors These are VERY difficult to find be careful You ll learn how to debug these in lab CS61C L3 C Pointers 12 Beamer Summer 2007 UCB Pointer Arithmetic 1 4 Pointer Arithmetic 2 4 Since a pointer is just a mem address we can add to it to traverse an array p 1 returns a ptr to the next array elt p vs p x p p p 1 x p x p p p 1 x p What if we have an array of large structs objects C takes care of it In reality p 1 doesn t add 1 to the memory address it adds the size of the array element CS61C L3 C Pointers 13 Beamer Summer 2007 UCB So what s valid pointer arithmetic Add an integer to a pointer Subtract 2 pointers in the same array Compare pointers Compare pointer to NULL indicates that the pointer points to nothing Everything else is illegal since it makes no sense adding two pointers multiplying pointers subtract pointer from integer CS61C L3 C Pointers 14 Beamer Summer 2007 UCB Pointer Arithmetic 3 4 Pointer Arithmetic 4 4 C knows the size of the thing a pointer points to every addition or subtraction moves that many bytes We can use pointer arithmetic to walk through memory 1 byte for a char 4 bytes for an int etc So the following are equivalent int get int array int n return array n OR return array n CS61C L3 C Pointers 15 Beamer Summer 2007 UCB CS61C L3 C Pointers 16 Beamer Summer 2007 UCB C Pointer Dangers Pointers in C Why use pointers If we want to pass a huge struct or array it s easier to pass a pointer than the whole thing In general pointers allow cleaner more compact code Unlike Java C lets you cast a value of any type to any other type without performing any checking int x 1000 int p x invalid int q int x valid So what are the drawbacks Pointers are probably the single largest source of bugs in software so be careful anytime you deal with them Dangling reference premature free Memory leaks tardy free CS61C L3 C Pointers 17 void copy int from int to int n int i for i 0 i n i to from Beamer Summer 2007 UCB The first pointer declaration is invalid since the types do not match The second declaration is valid C but is almost certainly wrong Is it ever correct CS61C L3 C Pointers 18 Beamer Summer 2007 UCB Segmentation Fault vs Bus Error Administrivia http www hyperdictionary com Bus Error A fatal failure in the execution of a machine language instruction resulting from the processor detecting an anomalous condition on its bus Such conditions include invalid address alignment accessing a multi byte number at an odd address accessing a physical address that …
View Full Document
Unlocking...