研究在注释里
#include<bits/stdc++.h>
using namespace std;
typedef struct t {
int n;
}t, *T;
/*
*e1 是一个结构体指针类型变量, 传入 a是指让e1指向a所在地址(实参) 注意e1不是a
&e2 是一个结构体引用类型变量, 传入了*a是指e2是a所在地址的引用(即a所在地址的软连接)(实参) e2是a
*&e3 是一个结构体指针的引用类型变量, 传入了a 是指让e3这个指针的软连接指向 a的地址(实参) e3不是a
e4 是一个结构体类型变量, 传入了*a是指让e4获取了*a所指向的结构体的内容(形参)
*/
void test(t *e1,t &e2, t *&e3,t e4) {
cout << e1 << " " << &e2 << " "<< e3 << " " << &e4 << endl;
e1->n = 1;
cout << (e1 == &e2) << " " << (&e2 == e3) << " " << (e1 == e3) << endl;
cout << e1->n << endl;
cout << e2.n << endl;
cout << e3->n << endl;
e2.n = 2;
cout << e1->n << endl;
cout << e2.n << endl;
cout << e3->n << endl;
e3->n = 3;
cout << e1->n << endl;
cout << e2.n << endl;
cout << e3->n << endl;
}
void test2(t *&e1,t e2) {
e1->n = 1;
e2.n = 2;
}
int main()
{
t* a = new t;
a->n = 10;
cout << a << endl;
test(a,*a,a,*a); //这里a是结构体的地址(实参)(即指针),*a是结构体本身(形参)(因为 * 本身就有根据地址取内容的作用)
cout << a->n << endl;
return 0;
}