Revision as of 03:50, 7 February 2012 by Gaot (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

int * a; a’s value is an address At that address, stores an integer (integer pointer)

c = * a; if it’s * a on the right hand side it means to go to that variable’s address to retrieve value

  • a = * b;

We take b’s value as address, and read value Then we take a’s value as address, modify the value at that address (Start on the right hand side, then work to the left hand side)

int * a = 5 This will be an error

int a = 5; int * b = & a; a is an integer b is a pointer, and the value is the address of a A pointer’s value is an address and an integer is stored at that address

If a pointer is on the left hand side of an assignment (=), it is to be modified. If a pointer is on the right hand side of an assignment (=), it is to be read

printf(“%d\n”, * b); Because * b is considered on the RHS, it reads the value at that address (i.e. -9). If you use printf(“%d\n”, b); in the function that initializes as * b, then the function will print the address as a value (i.e. 103). The same applies when you use &b.




IPA1-1: • read a maze file once to find the width and height • allocate a one or two-dimensional array • use fseek to reset the file pointer to the beginning • read the file again and store the maze in the array Today’s topic • pointer (value is an address) • heap memory • malloc and free Practice: • Use one-dimensional array to implement two-dimensional array • (hint: convert [row][col] to [index]) Practice: • allocate the array without reading the file twice • (hint: use fseek and ftell)

Heap Memory It is random access: You don’t need to follow the order first-in-last-out It comes at a price: you must allocate and you must release (garbage collection like Java) If a program does a lot for you, it tends to be slower. C is usually faster than Java If you don’t release the memory, it’s called a memory leak (allocated, but not released) If you have a memory leak in your program, you will have a -50% penalty. Memory leaks will cause unexpected crashes of your program. There are easy tools to check for memory leaks.

Memory Allocation There are two ways to create a one-dimensional array. 1) You know the size; it’s a fixed size. 2) Array size unknown, increase as program continues C does not initialize arrays; indexes start from zero

int arr[100]; int x; If array starts at address 200, x will have an address of 300. It reserves 100 spaces for your array.

Alumni Liaison

Recent Math PhD now doing a post-doctorate at UC Riverside.

Kuei-Nuan Lin