//int a = v1;
//int b = v2;
void swapValue(int a, int b) {
  int temp = a;
  a = b;
  b = temp;
  Serial.print("Swap Func A: ");
  Serial.println(a);
  Serial.print("Swap Func B: ");
  Serial.println(b);
}

// int &a = v1;
// int &b = v2;

void swapRef(int &a, int &b) {
  int temp = a;
  a = b;
  b = temp;
  Serial.print("Swap Func A: ");
  Serial.println(a);
  Serial.print("Swap Func B: ");
  Serial.println(b);
}

void swapPtr(int *a, int *b) {
  int temp = *a;
  *a = *b;
  *b = temp;
  Serial.print("Swap Func A: ");
  Serial.println(*a);
  Serial.print("Swap Func B: ");
  Serial.println(*b);
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);

  int v1 = 100, v2 = 200;
  //swapValue(v1, v2);
  //swapRef(v1, v2);
  // swapPtr(&v1, &v2);
  // Serial.print("v1: ");
  // Serial.println(v1);
  // Serial.print("v2: ");
  // Serial.println(v2);

  //1,初始化
  // int *ptr;
  // ptr = &v1;

  // int &ref=v1;

  // 2, reassignment
  // int *ptr;
  // ptr = &v1;
  // ptr = &v2;

  // int &ref = v1;
  // //&ref = v2;
  // ref = v2;  // => v1 =v2;
  // Serial.print("v1: ");
  // Serial.println(v1);
  // Serial.print("v2: ");
  // Serial.println(v2);

  //3, memory address
  // int *ptr;
  // ptr = &v1;
  // Serial.println(long(&ptr), HEX);
  // Serial.println(long(ptr), HEX);
  // Serial.println(long(&v1), HEX);

  // int &ref = v1;
  // Serial.println(long(&ref), HEX);
  // Serial.println(long(&v1), HEX);

  // 4 null
  //int *ptr;
  int *ptr  = nullptr;

  //int &ref = v1;
  int &ref = 1000;


}

void loop() {
  // put your main code here, to run repeatedly:
  delay(10); // this speeds up the simulation
}