追記。javaと比較しやすいように参照渡しの関数を追加しました
#include <stdio.h>

struct T{ int a; T(int i){a=i;} };
T f(T a){ return a; }
T& g(T& a){return a;} //前のコードに追加したコード
int main(){
T a(10);
T b=f(a);
T c = a;
T* d = &a;
T& e = a;
T& f = g(a); //参照渡し。同じアドレスをさす。前のコードとの違いはここ
printf("%d\n%d\n%d\n%d\n%d\n%d\n",&a,&b,&c,d,&e,&f);
return 0;
}
実行結果
1519342484
1519342488
1519342492
1519342484
1519342484
1519342484