From 2acf7822bdf45909d6c92fe30515b2a3b40e6c22 Mon Sep 17 00:00:00 2001 From: Brendan Batliner Date: Thu, 15 Oct 2015 16:34:53 -0500 Subject: Update c.html.markdown Added additional info on dynamically allocated arrays in C. --- c.html.markdown | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/c.html.markdown b/c.html.markdown index a8f71057..b4129f7a 100644 --- a/c.html.markdown +++ b/c.html.markdown @@ -445,6 +445,17 @@ int main (int argc, char** argv) for (xx = 0; xx < 20; xx++) { *(my_ptr + xx) = 20 - xx; // my_ptr[xx] = 20-xx } // Initialize memory to 20, 19, 18, 17... 2, 1 (as ints) + + // Note that there is no standard way to get the length of a + // dynamically allocated array in C. Because of this, if your arrays are + // going to be passed around your program a lot, you need another variable + // to keep track of the number of elements (size) of an array. See the + // functions section for more info. + int size = 10; + int *my_arr = malloc(sizeof(int) * size); + // Add an element to the array + my_arr = realloc(my_arr, ++size); + my_arr[10] = 5; // Dereferencing memory that you haven't allocated gives // "unpredictable results" - the program is said to invoke "undefined behavior" @@ -530,6 +541,23 @@ swapTwoNumbers(&first, &second); printf("first: %d\nsecond: %d\n", first, second); // values will be swapped */ + +/* +With regards to arrays, they will always be passed to functions +as pointers. Even if you statically allocate an array like `arr[10]`, +it still gets passed as a pointer to the first element in any function calls. +Again, there is no standard way to get the size of a dynamically allocated +array in C. +*/ +// Size must be passed! +// Otherwise, this function has no way of knowing how big the array is. +void printIntArray(int *arr, int size) { + int i; + for (i = 0; i < size; i++) { + printf("arr[%d] is: %d\n", i, arr[i]); + } +} + // if referring to external variables outside function, must use extern keyword. int i = 0; void testFunc() { -- cgit v1.2.3 From 36fe7e1ccec6be05a98b9a8bee633073dca0d24d Mon Sep 17 00:00:00 2001 From: Brendan Batliner Date: Thu, 15 Oct 2015 16:38:42 -0500 Subject: Added example of printIntArray in C --- c.html.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/c.html.markdown b/c.html.markdown index b4129f7a..3d632eab 100644 --- a/c.html.markdown +++ b/c.html.markdown @@ -557,6 +557,12 @@ void printIntArray(int *arr, int size) { printf("arr[%d] is: %d\n", i, arr[i]); } } +/* +int my_arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; +int size = 10; +printIntArray(my_arr, size); +// will print "arr[0] is: 1" etc +*/ // if referring to external variables outside function, must use extern keyword. int i = 0; -- cgit v1.2.3