ch3-ArrayArguments, Print array in C/C++
Chapter_3 Exercise_3-20 PointersAndBrackets | Exercise_3-21 |
ArrayArguments TCP1, p. 199-200 (arrayarguments.c, ArrayArguments.cpp)
arrayarguments.c download
#include <stdio.h> // for printf(), putchar()
void func1(int a[], int size); // virtually identical
void func2(int* a, int size); // argument lists
void print(int a[], char name[], int size); // virtually identical
void print(int* a, char* name, int size); // function declarations
int main()
{
int a[5], b[5];
// Probably garbage values:
print(a, "a", 5);
print(b, "b", 5);
putchar('\n');
// Initialize the arrays:
func1(a, 5);
func1(b, 5);
print(a, "a", 5);
print(b, "b", 5);
putchar('\n');
// Notice the arrays are always modified:
func2(a, 5); // array name is a pointer
func2(b, 5); // (passed by reference or address, not by value)
print(a, "a", 5);
print(b, "b", 5);
return 0;
}
void func1(int a[], int size)
{
int i;
for(i = 0; i < size; i++)
{a[i] = i * i - i;}
}
void func2(int* a, int size)
{
int i;
for(i = 0; i < size; i++)
{a[i] = i * i + i;}
}
void print(int a[], char* name, int size)
{
int i;
for(i = 0; i < size; i++)
{printf("%s[%d] = %d, ", name, i, a[i]);}
putchar('\n');
}
/* // compile error: redefinition of `print' (overloading not allowed in C):
void print(int* a, char name[], int size)
{
int i;
for(i = 0; i < size; i++)
{printf("%s[%d] = %d, ", name, i, a[i]);}
putchar('\n');
}
*/
/*
gcc arrayarguments.c -o arrayarguments
./arrayarguments
a[0] = -1251763802, a[1] = 32767, a[2] = 1701077981, a[3] = 21962, a[4] = 72315624,
b[0] = 0, b[1] = 0, b[2] = 1701077152, b[3] = 21962, b[4] = -1251763536,
a[0] = 0, a[1] = 0, a[2] = 2, a[3] = 6, a[4] = 12,
b[0] = 0, b[1] = 0, b[2] = 2, b[3] = 6, b[4] = 12,
a[0] = 0, a[1] = 2, a[2] = 6, a[3] = 12, a[4] = 20,
b[0] = 0, b[1] = 2, b[2] = 6, b[3] = 12, b[4] = 20,
*/
ArrayArguments.cpp download
#include <iostream>
#include <string>
using std::string;
using std::cout;
using std::endl;
void func1(int a[], int size); // virtually identical
void func2(int* a, int size); // argument lists
void print(int a[], string name, int size); // compiler considers these two
void print(int* a, string name, int size); // function declarations identical
int main()
{
int a[5], b[5];
// Probably garbage values:
print(a, "a", 5);
print(b, "b", 5);
cout << endl;
// Initialize the arrays:
func1(a, 5);
func1(b, 5);
print(a, "a", 5);
print(b, "b", 5);
cout << endl;
// Notice the arrays are always modified:
func2(a, 5); // array name is a pointer
func2(b, 5); // (passed by reference or address, not by value)
print(a, "a", 5);
print(b, "b", 5);
return 0;
}
void func1(int a[], int size)
{
for(int i = 0; i < size; i++)
{a[i] = i * i - i;}
}
void func2(int* a, int size)
{
for(int i = 0; i < size; i++)
{a[i] = i * i + i;}
}
// compiler registers the signature print(int*, string, int):
void print(int a[], string name, int size)
{
for(int i = 0; i < size; i++)
{cout << name << "[" << i << "] = " << a[i] << ", ";}
cout << endl;
}
/* // compile error: redefinition of function print(int*, string, int):
void print(int* a, string name, int size)
{
for(int i = 0; i < size; i++)
{cout << name << "[" << i << "] = " << a[i] << ", ";}
cout << endl;
}
*/
/*
g++ ArrayArguments.cpp -o ArrayArguments
./ArrayArguments
a[0] = 808467128, a[1] = 32767, a[2] = 1, a[3] = 0, a[4] = 808466800,
b[0] = 640, b[1] = 0, b[2] = 65535, b[3] = 1, b[4] = 808466816,
a[0] = 0, a[1] = 0, a[2] = 2, a[3] = 6, a[4] = 12,
b[0] = 0, b[1] = 0, b[2] = 2, b[3] = 6, b[4] = 12,
a[0] = 0, a[1] = 2, a[2] = 6, a[3] = 12, a[4] = 20,
b[0] = 0, b[1] = 2, b[2] = 6, b[3] = 12, b[4] = 20,
*/
Chapter_3 Exercise_3-20 PointersAndBrackets | BACK_TO_TOP | Exercise_3-21 |
Comments
Post a Comment