Yes, you are correct on ByVal.
It's an interesting conundrum, that one. The reference (i.e. the pointer in
C++ terms) can be passed by value and changes made via it will still change
what is pointed to. ByRef really tells the compiler that you can change the
pointer itself.
To retain my own sanity (if it's not already too late), I always use ByRef
on these pointers as a reminder to myself that the object pointed to can be
changed. It's an arbitrary convention and certainly not required by the
language.
Re bandwidth ... don't worry about bandwidth, I type quickly. And I was not
sure what you knew, as your question made me feel you might be confused
between the term "parameter" and a subroutine. So I stepped back a bit to
make sure we were talking approximately the same language.