08-algds-post

# 08-algds-post - More algorithms and data structures...

This preview shows pages 1–7. Sign up to view the full content.

This preview has intentionally blurred sections. Sign up to view the full version.

View Full Document

This preview has intentionally blurred sections. Sign up to view the full version.

View Full Document

This preview has intentionally blurred sections. Sign up to view the full version.

View Full Document
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: More algorithms and data structures Readings: Readings from CP:AMA, as detailed in the document available on the Web site. Pointer arithmetic and string manipulation Reading s-expressions, tree representations Mergesort and binary search Hash tables (implementation and use) Looking ahead: ADTs and C++ CS 136 Fall 2009 08: More algorithms and data structures 1 Pointer arithmetic int my_function( int A, int n) { ... } The declaration int * A would have the same effect here. In either case, A can be treated in the code for my_function either as the name of an array or as a pointer to an integer. The address of A[i] is computed by multiplying i by 4 and adding the address referenced by A . We can also perform this address computation explicitly in C with the expression A + i . Because A is a pointer to a 4-byte int , the compiler generates machine instructions to do the multiplication before the addition. CS 136 Fall 2009 08: More algorithms and data structures 2 The expression * (A+i) thus has the same meaning as A[i] . They are identical as lvalues and rvalues. int * p, * q, A[3] = {9, 2, 5}; p = A; q = A; q++; After the execution of q++ : p is a pointer to the element of A of index 0 q is a pointer to the element of A of index 1 CS 136 Fall 2009 08: More algorithms and data structures 3 252 9 2 5 244 248 252 256 address contents p 240 identifer location q 244 248 240 A 248 q - p has value 1, even though the addresses of these two elements differ by 4. This makes sense, as pointer subtraction should undo addition to a pointer. The comparison q < p yields 0 ( false ). CS 136 Fall 2009 08: More algorithms and data structures 4 The only arithmetic operations permitted with pointers are: adding an integer to a pointer, producing a pointer value; subtracting an integer from a pointer, producing a pointer value; subtracting a pointer from a pointer of the same type, producing an integer value. We can use array notation with pointers, if we wish. Since p points to the element of A of index 0: A[0] , * (A+0) , * A , * p , * (p+0) , and p[0] all have the same meaning. Since q points to the element of A of index 1: A[1] , * (A+1) , * q , * (q+0) , and q[0] all have the same meaning. CS 136 Fall 2009 08: More algorithms and data structures 5 Motivation for pointer arithmetic Explicit arithmetic on pointers was originally used to steer the compiler towards producing a more efficient translation into machine code. Modern compilers can perform optimizations that can generate identical code whether pointer arithmetic or array notation is used. It is still idiomatic to use pointer arithmetic in C programs, especially in the manipulation of strings, which can be viewed as arrays of characters....
View Full Document

## This note was uploaded on 10/30/2011 for the course CS 136 taught by Professor Becker during the Spring '08 term at Waterloo.

### Page1 / 93

08-algds-post - More algorithms and data structures...

This preview shows document pages 1 - 7. Sign up to view the full document.

View Full Document
Ask a homework question - tutors are online