summaryrefslogtreecommitdiffhomepage
path: root/c.html.markdown
diff options
context:
space:
mode:
authorRicky Stewart <rbstewart@uchicago.edu>2013-06-28 23:43:00 -0400
committerRicky Stewart <rbstewart@uchicago.edu>2013-06-28 23:43:00 -0400
commit2ad3be3860d4ea23e0f11d2ac90eea76bf0f22bf (patch)
tree0ea96b8978808f7f41460cceeb4aebb37c65d87c /c.html.markdown
parentaac6cb65c150eb8e795a9e23606d7491bdc8bb72 (diff)
parent2f54e2fe37f44f94e9513191f15a1123aa3df13d (diff)
merging in new pointer section from origin
Diffstat (limited to 'c.html.markdown')
-rw-r--r--c.html.markdown29
1 files changed, 22 insertions, 7 deletions
diff --git a/c.html.markdown b/c.html.markdown
index e5a6520f..78083ea5 100644
--- a/c.html.markdown
+++ b/c.html.markdown
@@ -216,28 +216,43 @@ printf("%d\n", (char)100.0);
// Pointers
///////////////////////////////////////
-// You can retrieve the memory addresses of your variables and perform
-// operations on them.
+// A pointer is a variable declared to store a memory address. Its declaration will
+// also tell you the type of data it points to. You can retrieve the memory address
+// of your variables, then mess with them.
int x = 0;
printf("%p\n", &x); // Use & to retrieve the address of a variable
// (%p formats a pointer)
// => Prints some address in memory;
-int x_array[20]; // Arrays are a good way to allocate a contiguous block
- // of memory
+// Pointer types end with * in their declaration
+int* px; // px is a pointer to an int
+px = &x; // Stores the address of x in px
+printf("%p\n", px); // => Prints some address in memory
+
+// To retreive the value at the address a pointer is pointing to,
+// put * in front to de-reference it.
+printf("%d\n", *px); // => Prints 0, the value of x, which is what px is pointing to the address of
+
+// You can also change the value the pointer is pointing to.
+// We'll have to wrap the de-reference in parenthesis because
+// ++ has a higher precedence than *.
+(*px)++; // Increment the value px is pointing to by 1
+printf("%d\n", *px); // => Prints 1
+printf("%d\n", x); // => Prints 1
+
+int x_array[20]; // Arrays are a good way to allocate a contiguous block of memory
int xx;
for (xx=0; xx<20; xx++) {
x_array[xx] = 20 - xx;
} // Initialize x_array to 20, 19, 18,... 2, 1
-// Pointer types end with *
+// Declare a pointer of type int and initialize it to point to x_array
int* x_ptr = x_array;
// x_ptr now points to the first element in the array (the integer 20).
// This works because arrays are actually just pointers to their first element.
-// Put a * in front to de-reference a pointer and retrieve the value,
-// of the same type as the pointer, that the pointer is pointing at.
+// Arrays are pointers to their first element
printf("%d\n", *(x_ptr)); // => Prints 20
printf("%d\n", x_array[0]); // => Prints 20