# Dive Into Systems: Exercises

## Section2.2C Pointer Variables

### Checkpoint2.2.2.Multiple Choice(True and False).

Which of these are good reasons to use a pointer variable? Select all that are true.
• When you want to hold a normal int
• When you want to dynamically allocate memory
• When you want to make a fixed-size array of size 10
• When you want to make a linked dynamic data structure
• When you want to pass a large data structure to a function
• When you want to pass a parameter to a function that that function can change
• When you want to hold a floating point number
Hint.
What is the unique feature of using pointer instead of value? Do we need these features in the scenarios above?

Given the following code, what does it print to the screen when executed?
a = 3;
ptr = &a;
*ptr = 7;
printf("%d\n", *ptr);
//draw what memory looks like here.

Trace through its execution and draw a picture of memory after its execution.
Here is a picture showing the result of the above pointer operatons. Variable a’s initial value is 3, while ptr contains the address of a. Dereferencing ptr and setting its associated value to 7 thus updates the value of a to 7. ### Checkpoint2.2.4.Multiple Choice (True and False).

What does the following code print to the screen when executed?
int x, y, *ptr, z;
ptr = NULL;
x  = 10;
y = 20;
z = 30;

printf("%d\n", *ptr);
ptr = &x;

• Segfault / Crash (Probably)
• 10
• 20
• 30
• 0
Hint.
What happens when you dereference a NULL pointer?

### Checkpoint2.2.5.Fill-In the Blank.

What does the following code print to the screen when executed?
int a, b, *ptr2;

a = 5;
b = 6;
ptr2 = &b;
b = 10;

printf("%d", *ptr2);


### Checkpoint2.2.6.Pointers, Multiple Choice.

Given the following code:
void f1(void) {
int x, y, *ptr1, *ptr2;
x = 2;
y = 10;
ptr1 = &x;
ptr2 = ptr1;
*ptr1 = 6;
ptr1 = &y;
printf("*ptr1=%d *ptr2=%d\n", *ptr1, *ptr2);
}

What does the function f1() print?
• *ptr1=10 *ptr2=6
• Correct! Good job!
• *ptr1=&x *ptr2=&y
• The printf statement dereferences the values.
• *ptr1=2 *ptr2=10
• *ptr1=6 *ptr2=10
• *ptr1=2 *ptr2=2
• *ptr1=10 *ptr2=10
• *ptr1=6 *ptr2=6
• segfault (program crashes with a segfault)
• This code actually produces output!
• compile error
• This code actually compiles!
Hint.
Trace the values in memory for the variables with arrows and boxes.

### Checkpoint2.2.7.Parsons problem.

Reorder the lines of code below to make a program that swaps the values pointed to by the integer pointers ptr1 and ptr2 (int *ptr1, *ptr2). There is also an integer x (int x).
Assume the follwoing variable declaration and initialized code:
int x, y, temp;
int *ptr1, *ptr2;

x = 6;
y = 7;
ptr1 = &x;
ptr2 = &y;