I understand we return by address or return by reference in order to reduce memory usage by only returning the memory location of the object.

For the two snippets, the former is a Calculator object and it is returning each basic arithmetic by reference, what I am not clear about is why it's '*this' and not 'this'? Is it mixing references and pointers, so I mean "this" is a hidden pointer, so
Code:
return *this;
means it is dereferencing it before it can be returned? While with the struct example, there is no use of asterisk in front of the member returned.

Code:
class Calc 
{ 
private: 
    int m_nValue; 
  
public: 
    Calc() { m_nValue = 0; } 
  
    Calc& Add(int nValue) { m_nValue += nValue; return *this; } 
    Calc& Sub(int nValue) { m_nValue -= nValue; return *this; } 
    Calc& Mult(int nValue) { m_nValue *= nValue; return *this; } 
  
    int GetValue() { return m_nValue; } 
};
(VS)

Code:
// This struct holds an array of 25 integers 
struct FixedArray25 
{ 
    int anValue[25]; 
}; 
  
// Returns a reference to the nIndex element of rArray 
int& Value(FixedArray25 &rArray, int nIndex) 
{ 
    return rArray.anValue[nIndex]; 
} 
  
int main() 
{ 
    FixedArray25 sMyArray; 
  
    // Set the 10th element of sMyArray to the value 5 
    Value(sMyArray, 10) = 5; 
  
    cout << sMyArray.anValue[10] << endl; 
    return 0; 
}