/* * Demonstrate some pecularities of array passing in C. */ #include using namespace std; // Each version receives the same size-5 integer array from the main pgm. // Receive it as declared in main. void rcvA(int arr[5]) { cout << "rcvA: "; for(int m = 0; m < 5; m++) cout << arr[m] << " "; cout << endl; } // Receive it as the system sends it -- a pointer to the first item in the // array. void rcvB(int *arr) { cout << "rcvB: "; for(int m = 0; m < 5; m++) cout << arr[m] << " "; cout << endl; } // Since it sends a pointer and ignores the array size anyway, the system // lets you leave it out here, too. void rcvC(int arr[]) { cout << "rcvC: "; for(int m = 0; m < 5; m++) cout << arr[m] << " "; cout << endl; } // In fact, so long as the system is going to ignore the size anyway, we can // write what we want. The 1024 doesn't make the array that large, // however; it's however large its creator made it. rcvD can't find out. void rcvD(int arr[1024]) { cout << "rcvD: "; for(int m = 0; m < 5; m++) cout << arr[m] << " "; cout << endl; } int main() { // Here's the array all the fuss is about. int arr[5]; // Put some stuff there. for(int i = 0; i < 5; ++i) arr[i] = 2*i -3; // Do exactly what the functions do. cout << "main: "; for(int m = 0; m < 5; m++) cout << arr[m] << " "; cout << endl; // Now run the functions. rcvA(arr); rcvB(arr); rcvC(arr); rcvD(arr); }