Presentation is loading. Please wait.

Presentation is loading. Please wait.

Intermediate Pointers & Basic Structures

Similar presentations


Presentation on theme: "Intermediate Pointers & Basic Structures"— Presentation transcript:

1 Intermediate Pointers & Basic Structures
C Lab 2 Intermediate Pointers & Basic Structures

2 Goals Review realloc structs ArrayList Pointers
Referencing/Dereferencing free realloc structs ArrayList

3 Review: What are Pointers?
A pointer is an address on either the stack or heap. EX: “double *” should address a double in memory. For the pointer to contain data, some other function must create the data it will point to. This is typically a call to malloc. Of course you should elaborate on why the word should is in bold.

4 Getting Pointer/Reference
To get pointer to something, use ‘&’ ‘&’ allows to pass items by reference To dereference or get item pointed to use ‘*’ ‘*’ is the opposite of ‘&’

5 Pass by Copy Pass by copy: void main(){ void plus(int num){
} void main(){ int num = 3; plus(num); printf(“%d\n”, num); } What does main print?

6 Pass by Reference Pass by reference: void plus(int *num){ (*num)++; }
void main(){ int num = 3; plus(&num); printf(“%d\n”, num); } What does main print now?

7 Void * and realloc “void *” may point to arbitrary types (i.e. int*, char*, etc.) Can be casted to appropriate types realloc increases the size of memory allotted to pointer Preserves data pointed to by original pointer Original pointer is NULL, if space is found elsewhere Just bring up why malloc returns a void *, and how we casted it to a char * for the string manipulation last time.

8 Realloc and Equivalent
ptr = malloc(2); ptr = realloc(ptr, 1000); ptr = malloc(2); ptr2 = malloc(1000); memcpy(ptr2, ptr, 2); free(ptr); ptr = ptr2; ptr2 = NULL; Why not: ptr = malloc(2); realloc(ptr, 1000); Answer: If the memory is found in a separate segment of memory, ptr will equal NULL.

9 Structs Personalized types, somewhat like classes
May contain items of choice Often the basis of (data) structures

10 Structs typedef struct arraylist { int *buffer; int buffersize;
int length; } arraylist; May instruct the students to open the file, and follow along if you would like. I feel like there is no reason to not include typedef notation. Also, relate the previously bolded should to this buffer. Is this an arraylist of ints? (I know the answer. You should ask the students to make sure they’re awake.)

11 Editing Struct Fields You may declare structs on the stack
You may access/edit fields of struct using ‘.’ Think about why this works (Hint: pointers) Be careful about how far you go into this explanation of why. Feel out your section, and don’t go too deep.

12 Editing Struct Fields arraylist a; a.buffer = NULL; a.buffer_size = 0;
a.length = 0;

13 Editing Struct Fields You may declare structs on the heap
Now you access/edit fields using ‘->’ This syntax is more helpful visually

14 Editing Struct Fields arraylist *a = (arraylist *)malloc(sizeof(arraylist)); a->buffer = NULL; a->buffer_size = 0; a->length = 0;

15 Memory Management You must free what you malloc (heap)
Stack manages itself arraylist *a = (arraylist *)malloc(sizeof(arraylist)); free(a); //yaaaaaaaaay Bolded to denote that it’s a pointer.

16 Memory Management Do not free what you did not malloc!!!
Do not free address consecutively!!! int num = 3; free(&num); // :,O int *num = malloc(4) free(num); //yaaaayyy free(num); //staaahp Mention that the sequence: malloc, free, malloc, free, … , free is ok.

17 Memory Takeaways Only free what has been malloc’d
Only free malloc’d memory once For more on stack vs. heap: These sections of memory have not been discussed in class. If they have questions on it you can refer them to this link.

18 Connect Thoughts Begin the lab exercise
Where/When might realloc be useful? Where/When might free be useful?


Download ppt "Intermediate Pointers & Basic Structures"

Similar presentations


Ads by Google