Re: Stroustrup 5.9, exercise 10 (using a function)
On Apr 2, 11:00 am, "arnuld" <geek.arn...@gmail.com> wrote:
On Apr 2, 1:47 pm, "Erik Wikstr=F6m" <eri...@student.chalmers.se> wrote:
Personally I'd prefer a version where the size is passed as an
argument just to be safe, something like your first try, but also
incrementing arr:
void print_arr(const char** arr, size_t arr_size)
{
std::cout << "\n\tUSING FUNCTION\n";
for(unsigned int i=0; i < arr_size; ++i, arr++)
std::cout << *arr << std::endl;
}
this is the 1st time i have seen someone incrementing an "array",
never saw so even in any book.
There's no array in this function, just a pointer.
does it work like this:
*arr == &arr[0]
++arr == &arr[0 + 1]
?
IOW, like a pointer
If you look at the declaration of the function, it's a pointer.
Had he wanted to confuse you, he could have declared the
function:
void print_arr( char const* arr[], size_t size ) ...
Despite appearances, there's no array here either. There's a
special rule that says when the type of a function parameter is
declared to be array of T, the actual type is pointer to T.
And pointers can be incremented.
Never the less, I'd keep it simple:
void print_arr( char const* arr[], size_t size )
{
for ( size_t i = 0 ; i < size ; ++ i ) {
std::cout << arr[ i ] << std::endl ;
}
}
or (more idiomatic, because closer to what you do with the STL,
but perhaps less readable anyway):
void print_arr( char const** arr, size_t size )
{
char const** end = arr + size ;
while ( arr != end ) {
std::cout << *arr << std::endl ;
++ arr ;
}
}
Note, however, the ambiguity in the use between pointers and
arrays. The definition of the [] operator is a[b] == *(a+b).
Always. You can index arrays because an array converts
implicitly to a pointer to the first element in most contexts.
And the [] is defined as a pointer operator, not an array
operator. Note that this means that things like "abcd"[ i ],
or even i[ "abcd" ] are legal (where i is an int)---if a[b] is
legal, so is b[a]. (Obviously, putting the index in front of
the braces is only good for obfuscation. But realizing that it
is legal, and why, does help understanding the oddities of
arrays in C and in C++. And why so many people prefer
std::vector to a C style array:-).)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34