Let me try at the machine language level. If you pass data via register or address, it is by reference, nothing copied. if you copied data, occupying more than 1 address, it is by value; it is applicable to copied pointer, because more memory is used.