#include "Arduino.h"

int V1=100;
int V2=200;

//交换完后内部值发生变化,外部没有变化
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);
};

// 交换完后引用对应的值发生交换
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 swapPtrValue(int *a, int *b){
	int temp=*a; // 这里的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;
	temp=a; 
	a=b; 
	b=temp; 
	Serial.print("Swap Func a: ");
	Serial.println(*a);
	Serial.print("Swap Func b: ");
	Serial.println(*b);
};

void setup() {
  Serial.begin(115200);
	// swapValue(V1,V2);   
	// swapRef(V1,V2);   
	// swapPtrValue(&V1,&V2);   
	swapPtr(&V1,&V2);  
	// Serial.println(V1);
	Serial.print("V1: ");
	Serial.println(V1);
	Serial.print("V2: ");
	Serial.println(V2);


	// 1.define
  // int a = 100;  //创建一个int变量a
  // int *ptr; //创建一个指针
  // ptr = &a;  //指针进行赋值
	// int &ref = V1;  // 创建一个引用,创建时候必须要初始化,初始化必须要是一个对象
  // int &ref = a; //将变量a取一个别名为ref(取小名)  指针都指向同一个位置

	// 2.reassignment
	// int *ptr1;
	// int *ptr2;
	// ptr1=&V1;
	// ptr2=&V2;
	// // $ref=V2;
	// ref=V2; // ref之前是对V1的引用,这里相当于 V1=V2;

  // Serial.print("*ptr");
  // Serial.println(*ptr); //打印指针对应的对象
  // Serial.print("ptr");
  // Serial.printf(ptr); //无法打印指针

	// 3.memory address
// 	int *ptr1;
// 	ptr1=&V1;
// 	int &ref = V1;
// Serial.println(long(&ptr1),HEX); // 打印ptr1的指针地址
// Serial.println(long(ptr1),HEX); // 打印ptr
// Serial.println(long(&V1),HEX); // 打印v1的地址
// Serial.println(long(V1),HEX); // 打印v1的值
// Serial.println(long(ref),HEX);  //打印ref的值
// Serial.println(long(&ref),HEX); //打印ref的指针

// 4.null
int *ptr=nullptr;

int $ref=1000;

}


void loop() {
  delay(10);
}