Show the output from the following programs:
#include <iostream>
using namespace std;
// arr is a constant array - contents cannot be changed by f0
void f0(const int arr[])
{
printf("f0\n");
int a = 9;
printf("Param addr: %p Value: %d\n", arr, arr[0]);
// arr[0]++; // not allowed to change contents of a const array
arr = &a;
printf("After reset: %p Value: %d\n\n", arr, arr[0]);
}
// arr is a constant ptr - contents cannot be changed by f1
void f1(const int* arr)
{
printf("f0\n");
int a = 9;
printf("Param addr: %p Value: %d\n", arr, arr[0]);
// arr[0]++; // not allowed to change contents of a const array
arr = &a;
printf("After reset: %p Value: %d\n\n", arr, arr[0]);
}
// arr is a regular ptr - contents can be changed
void f2(int *arr)
{
printf("f0\n");
int a = 9;
printf("Param addr: %p Value: %d\n", arr, arr[0]);
arr[0]++;
arr = &a;
printf("After reset: %p Value: %d\n\n", arr, arr[0]);
}
// arr is a regular array - contents can be changed
void f3(int arr[])
{
printf("f0\n");
int a = 9;
printf("Param addr: %p Value: %d\n", arr, arr[0]);
arr[0]++;
arr = &a;
printf("After reset: %p Value: %d\n\n", arr, arr[0]);
}
// arr is a pointer passed by reference,
// both the array contents AND the pointer itself
// can be changed by the function
void f4(int* &arr)
{
printf("f0\n");
int a = 9;
printf("Param addr: %p Value: %d\n", arr, arr[0]);
arr[0]++;
arr = &a;
printf("After reset: %p Value: %d\n\n", arr, arr[0]);
}
int main()
{
int array[3] = { 0, 3, 6 };
f0(array);
f1(array);
f2(array);
f3(array);
// f4(array); // not allowed, can't pass an array by reference
int *dynamicArray = new int[3];
if (dynamicArray != NULL) {
dynamicArray[0] = 0;
f4(dynamicArray);
printf("After f4: %p\n", (dynamicArray));
}
}
|