114k views
0 votes
2- (8 point) Write a program using the instructions below. Assume that integers are stored in 4 bytes. a) Define an array of type int called apples with five elements, and initialize the elements to the even integers from 2 to 10. b) Define a pointer aPtr that points to a variable of type int. c) Print the elements of array values using a for statement. d) Write two separate statements that assign the starting address of the array to pointer variable aPtr. e) What physical address is aPtr pointing to? f) Print the elements of array values using pointer/offset notation. g) What address is referenced by aPtr + 3? What value is stored at that location? h) Assuming aPtr points to apples[4], what address is referenced by aPtr -= 4? What value is stored at that location?

User MrkK
by
4.5k points

1 Answer

4 votes

Answer:

a)

int apples [5] = {2, 4, 6, 8, 10};

b)

int *aPtr //this is the pointer to int

Another way to attach a pointer to a an int variable that already exists:

int * aPtr;

int var;

aPtr = &var;

c)

for (int i = 0; i < size; i++){

cout << values[i] << endl; }

d)

aPtr = values;

aPtr = &values[0];

both the statements are equivalent

e)

If its referring to the part d) then the address is:

cout<<aPtr;

f)

for (int i = 0; i < size; ++i) {

cout<<*(vPtr + i)<<endl; }

g)

cout << (aPtr + 3) << endl; // address referenced by aPtr + 3

cout << *(aPtr + 3) << endl; // value stored at that location

This value stored at location is 8

h)

aPtr = &apples[4];

aPtr -= 4;

cout<<aPtr<<endl;

cout<<*aPtr<<endl;

Explanation:

a)

int apples [5] = {2, 4, 6, 8, 10};

In this statement the array names is apples, the size of the array is specified in square brackets. so the size is 5. The type of array apples is int this means it can store integer elements. The values or elements of the array apples are even integers from 2 to 10. So the elements of array are:

apples[0] = 2

apples[1] = 4

apples[2] = 6

apples[3] = 8

apples[4] = 10

b)

In this statement int *aPtr

The int* here is used to make the pointer aPtr points to integer object. Data type the pointer is pointing to is int. The asterisk symbol used with in makes this variable aPtr a pointer.

If there already exists an int type variable i.e. var and we want the pointer to point to that variable then declare an int type pointer aPtr and aPtr = &var; assigns the address of variable var to aPtr.

int * aPtr;

int var;

aPtr = &var;

c)

The complete program is:

int size= 5;

int values[size] = {2,4,6,8,10};

for (int i = 0; i < size; i++){

cout << values[i] << endl; }

The size of array is 5. The name of array is values. The elements of array are 2,4,6,8,10.

To print each element of the values array using array subscript notation, the variable i is initialized to 0, because array index starts at 0. The cout statement inside body of loop prints the element at 0-th index i.e. the first element of values array at first iteration. Then i is incremented by 1 each time the loop iterates, and this loop continues to execute until the value of i get greater of equal to the size i.e. 5 of values array.

The output is:

2

4

6

8

10

d)

aPtr = values;

This statement assigns the first element in values array to pointer aPtr. Here values is the address of the first element of the array.

aPtr = &values[0];

In this statement &values[0] is the starting address of the array values to which is assigned to aPtr. Note that the values[0] is the first element of the array values.

e)

Since &values[0] is the starting address of the array values to which is assigned to aPtr. So this address is the physical address of the starting of the array. If referring to the part d) then use this statement to print physical address is aPtr pointing to

cout<<aPtr;

This is basically the starting address of the array values to which is assigned to aPtr.

The output:

0x7fff697e1810

f)

i variable represents offset and corresponds directly to the array index.

name of the pointer i.e. vPtr references the array

So the statement (vPtr + i) means pointer vPtr that references to array values plus the offset i array index that is to be referenced. This statement gives the address of i-th element of values array. In order to get the value of the i-th element of values array, dereference operator * is used. It returns an ith value equivalent to the address the vPtr + i is pointing to. So the output is:

2

3

6

8

10

g)

values[0] is stored at 1002500

aPtr + 3 refers to values[3],

An integer is 4 bytes long,

So the address that is referenced by aPtr + 3 is

1002500 + 3 * 4 = 1002512

values[3] is basically the element of values array at 3rd index which is the 4th element of the array so the value stored at that referred location is 8.

h)

Given that aPtr points to apples[4], so the address stored in aPtr is

1002500 + 4 * 4 = 1002516

aPtr -= 4 is equivalent to aPtr = aPtr - 4

The above statement decrements aPtr by 4 elements of apples array, so the new value is:

1002516 - 4 * 4 = 1002500

This is the address of first element of apples array i.e 2.

Now

cout<<aPtr<<endl; statement prints the address referenced by aPtr -= 4 which is 1002500

cout<<*aPtr<<endl; statement prints the value is stored at that location which is 2.

User Brett Stottlemyer
by
4.5k points