The previous entry looked at various ways to pass a variable
to a function: by value, by reference or by pointer. This entry looks at
passing an array to a function. In C/C++ arrays are passed by reference or by
pointer, not by value. This means the called function can directly change the
array as passed by the caller. You can however pass one element of an array by
value in the same way you pass an integer or other data type.
The
sample code calls a function, CapFirstLetter,
which takes a character array from the caller and raises the first letter of
each word to uppercase.
The
character array is created by:
char Text[] = "Some
words to cap.";
I can
then define the function signature in one of two ways: with or without a
pointer.
int CapFirstLetter(char vText[]);
int CapFirstLetter(char * vText);
The code inside the function is the same.
I can then call the function in one of three ways:
CapFirstLetter(Text);
CapFirstLetter(&Text[0]);
char * pText =
&Text[0];
OR
char * pText = Text;
CapFirstLetter(pText);
The critical point to remember is that using the name of the
array, in this case, Text,
is actually a pointer to the first element of the array. Thus, using Text is the same as using &Text[0] and a pointer can
be assigned using either method. The result is the same.
Sample Code.
//
Standard I/O library.
#include <cstdio>
//
Prototypes.
int CapFirstLetter(char vText[]);
int CapFirstLetter2(char * vText);
int main()
{
printf("Call
Function To Cap First Letter of Every Word\n\n");
/////////////////////////////////////////////////////////////////
// 1. Pass array
by array name.
printf("1.
Pass array by array name.\n\n");
char Text[]
= "Some words to cap.";
CapFirstLetter(Text);
printf("Version
1: %s\n", Text);
// The name of
the array is a pointer to first element.
char
Text2[] = " This function
handles extra spaces.";
CapFirstLetter(&Text2[0]);
printf("Version
2: %s\n\n\n", Text2);
/////////////////////////////////////////////////////////////////
// 2. Pass array
by pointer variable.
printf("2.
Pass array by pointer variable.\n\n");
// Create
pointer.
char
Text3[] = "a statement with all lowercase
letters";
// Option 1.
// The name of
the array, Text3, is a pointer to Text3[0].
// char * pText =
Text3;
// Option 2.
// Another way to
get the address of the first element.
char *
pText = &Text3[0];
CapFirstLetter(pText);
printf("Version
3: %s\n", Text3);
// Start later in
the array.
char
Text4[] = "a statement with all lowercase
letters";
pText = &Text4[2];
CapFirstLetter(pText);
printf("Version
4: %s\n", Text4);
// Close the
file.
fclose(stdout);
// Return
something.
return 0;
}
int CapFirstLetter(char vText[])
{
/////////////////////////////////////////////////////////////////
// Capitalize
first letter of a string of text.
short i;
bool
PrevSpace = true;
for (i = 0;
vText[i]; i++)
{
// Look to
find start of new word.
if
(PrevSpace)
{
//
Ignore space.
if
(vText[i] == ' ')
//
Go to next char.
continue;
// Not
a space, reset flag.
PrevSpace = false;
//
Want lowercase only.
if
((vText[i] >= 97) && (vText[i] <= 122))
{
//
Appy uppercase.
vText[i] -= 32;
}
}
else
{
//
Start of new word.
if
(vText[i] == ' ')
//
Reset.
PrevSpace = true;
}
}
// Return
success.
return 0;
}
Output.