The new story goes like this: computers store data in memory. The types of storage are few but esential char int, long, short, unsigned float, double aggregate types array - all items are same, indexed by integer struct - items can be any mixture, items identified by member name there is one more type: the pointer - today's topic Now, let's talk about things we might want to do with memory a. Access arrays - efficiently b. Pass variables by reference - e.g. modify values - e.g. fill in structs or pass structs without copy c. Substrings - pass part of a string after the start d. Specify memory locations for read/write c. How can we do these Let's focus right now on Ideas a. array access x[i] means start at spot x and go i boxes ahead but that's redundant work, why not say here, then here then here... How can we say right here instead of i units from x? b. Pass a struct by reference We have the struct here in memory , why not tell the function where the form is? Let's look at these two things from the perspective of memory arrays - usual notation is x[i] where x is the name of the array and i is the offset. How does that work? other types - send the location (where in memory) a variable is instead of copying the value.