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

Popular posts from this blog

Contents