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.