On 9/12/2010 1:01 AM, Keith Gable wrote:
On Sun, 2010-09-12 at 12:57 +1200, Ralph Versteegen wrote:
C didn't have references.

I thought that a reference in BASIC languages is the same thing as a
pointer in C languages. In VB6, ByVal creates a copy of the object (I'm
sure it does the same thing in FB), whereas ByRef is a pointer, even to
the extent that C APIs that follow the standard calling convention that
require pointers will work if you define the pointers as ByRef. Though
that same API could be declared ByVal but then you use AddressOf when
calling it.

[This site][1] seems to reinforce this, at least for VB6. Are things
different in FB? Just curious.

[1]: http://www.cpearson.com/excel/byrefbyval.aspx

No, you are correct. I will make a table:

|------------------------------------------------|
|ALMOST EQUIVALENT THINGS                        |
|------------------------------------------------|
| BASIC            | C        | C++              |
|------------------+----------+------------------|
| BYREF            | Pointers | References *     |
|------------------+----------+------------------|
| BYREF as integer | int *    | int &            |
|------------------------------------------------|

- BYVAL parameters are copies of the original, passed via stack. They can be modified with no consequence (unless it's a UDT with pointers, since the pointers will still point at the old data!)

- BYREF parameters are pointers, but they cannot be reassigned.

- Pointers are pointers (duh), but they CAN be reassigned.

- References are aliases to the variables they reference. They cannot be reassigned, and are effectively the same as the original variable.

_______________________________________________
Ohrrpgce mailing list
[email protected]
http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org

_______________________________________________
Ohrrpgce mailing list
[email protected]
http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org

Reply via email to