DOC PREVIEW
Berkeley COMPSCI 61C - C Pointers & Arrays

This preview shows page 1-2-14-15-29-30 out of 30 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 30 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 30 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 30 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 30 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 30 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 30 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 30 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

CS 61C L03 C Arrays (1)A Carle, Summer 2005 © UCBinst.eecs.berkeley.edu/~cs61c/su05CS61C : Machine StructuresLecture #3: C Pointers & Arrays2005-06-22Andy CarleCS 61C L03 C Arrays (2)A Carle, Summer 2005 © UCBAddress vs. Value•What good is a bunch of memory if you can’t select parts of it?• Each memory cell has an addressassociated with it.• Each cell also stores some value.•Don’t confuse the address referring to a memory location with the valuestored in that location.23 42......101 102 103 104 105 ...CS 61C L03 C Arrays (3)A Carle, Summer 2005 © UCBPointers•A pointer is just a C variable whose value is the address of another variable!•After declaring a pointer: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… (next time)CS 61C L03 C Arrays (4)A Carle, Summer 2005 © UCBPointers•Declaring a pointer just allocates space to hold the pointer – it does not allocate something to be pointed to!•Local variables in C are not initialized, they may contain anything.CS 61C L03 C Arrays (5)A Carle, Summer 2005 © UCBPointer Usage ExampleMemory and Pointers:0xffff ffff0x0000 00000xcafe 00000xbeef 00000x0000 0004CS 61C L03 C Arrays (6)A Carle, Summer 2005 © UCBPointer Usage ExampleMemory and Pointers:int *p, v;0xXXXXXXXX0xffff ffff0x0000 00000xcafe 00000xXXXXXXXX0xbeef 00000x0000 0004p:v:CS 61C L03 C Arrays (7)A Carle, Summer 2005 © UCBPointer Usage ExampleMemory and Pointers:int *p, v;p = &v;0xXXXXXXXX0xffff ffff0x0000 00000xcafe 00000xcafe 00000xbeef 00000x0000 0004p:v:CS 61C L03 C Arrays (8)A Carle, Summer 2005 © UCBPointer Usage ExampleMemory and Pointers:int *p, v;p = &v;v = 0x17;0x0000 00170xffff ffff0x0000 00000xcafe 00000xcafe 00000xbeef 00000x0000 0004p:v:CS 61C L03 C Arrays (9)A Carle, Summer 2005 © UCBPointer Usage ExampleMemory and Pointers:int *p, v;p = &v;v = 0x17;*p = *p + 4;V = *p + 40x0000 001b0xffff ffff0x0000 00000xcafe 00000xcafe 00000xbeef 00000x0000 0004p:v:CS 61C L03 C Arrays (10)A Carle, Summer 2005 © UCBPointers 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.•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)CS 61C L03 C Arrays (11)A Carle, Summer 2005 © UCBC Pointer Dangers•What does the following code do?• S E G F A U L T ! (on my machine/os)• (Not a nice compiler error like you would hope!)void f(){int *ptr;*ptr = 5;}CS 61C L03 C Arrays (12)A Carle, Summer 2005 © UCBC Pointer Dangers•Unlike Java, C lets you cast a value of any type to any other type withoutperforming any checking.int x = 1000;int *p = x; /* invalid */int *q = (int *) x; /* valid */•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?CS 61C L03 C Arrays (13)A Carle, Summer 2005 © UCBPointers and Parameter Passing•Java and C pass a parameter “by value”• procedure/function gets a copy of the parameter, so changing the copy cannot change the originalvoid addOne (int x) {x = x + 1;}int y = 3;addOne(y);•y is still = 3CS 61C L03 C Arrays (14)A Carle, Summer 2005 © UCBPointers and Parameter Passing•How to get a function to change a value?void addOne (int *p) {*p = *p + 1;}int y = 3;addOne(&y);•y is now = 4CS 61C L03 C Arrays (15)A Carle, Summer 2005 © UCBArrays (1/7)•Declaration:int ar[2];declares a 2-element integer array.int ar[] = {795, 635};declares and fillsa 2-elt integer array.•Accessing elements:ar[num];returns the numthelement from 0.CS 61C L03 C Arrays (16)A Carle, Summer 2005 © UCBArrays (2/7)•Arrays are (almost) identical to pointers•char *string and char string[] are nearly identical declarations• They differ in very subtle ways: incrementing, declaration of filled arrays•Key Difference: An array variable is a CONSTANTpointer to the first element.CS 61C L03 C Arrays (17)A Carle, Summer 2005 © UCBArrays (3/7)•Consequences:•ar is a pointer•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 validchar *foo() {char string[32]; ...;return string;} is incorrectCS 61C L03 C Arrays (18)A Carle, Summer 2005 © UCBArrays (4/7)•Array size n; want to access from 0 to n-1:int ar[10], i=0, sum = 0;...while (i < 10)/* sum = sum+ar[i]; i = i + 1; */sum += ar[i++];CS 61C L03 C Arrays (19)A Carle, Summer 2005 © UCBArrays (5/7)•Array size n; want to access from 0 to n-1, so you should use counter AND utilize a constant for declaration & incr• Wrongint i, ar[10];for(i = 0; i < 10; i++){ ... }• Right#define ARRAY_SIZE 10int 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 10CS 61C L03 C Arrays (20)A Carle, Summer 2005 © UCBArrays (6/7)•Pitfall: An array in C does notknow its own length, & bounds not checked!• Consequence: We can accidentally access off the end of an array.• Consequence: We must pass the array and its sizeto 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…CS 61C L03 C Arrays (21)A Carle, Summer 2005 © UCBArrays 7/7: In Functions•An array parameter can be declared as an array ora pointer; an array argument can be passed as a pointer.• Can be incrementedint strlen(char s[]){int n = 0;while (s[n] != 0)n++;return n;}int strlen(char *s){int n = 0;while (s[n] != 0)n++;return n;}Could be written:while (s[n])CS 61C L03 C Arrays (22)A Carle, Summer 2005 © UCBPointer Arithmetic (1/5)•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)+ 1 vs*p++ vs *( p + 1) vs *(p)++ ?• x = *p++ ⇒ x = *p ; p = p + 1;• x = (*p)++⇒ x = *p ; *p = *p + 1;•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.CS


View Full Document

Berkeley COMPSCI 61C - C Pointers & Arrays

Documents in this Course
SIMD II

SIMD II

8 pages

Midterm

Midterm

7 pages

Lecture 7

Lecture 7

31 pages

Caches

Caches

7 pages

Lecture 9

Lecture 9

24 pages

Lecture 1

Lecture 1

28 pages

Lecture 2

Lecture 2

25 pages

VM II

VM II

4 pages

Midterm

Midterm

10 pages

Load more
Download C Pointers & Arrays
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view C Pointers & Arrays and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view C Pointers & Arrays 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?