void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("Hello, ESP32-S3!");

  uint16_t a = 10;    // 定义一个变量
  uint16_t b = 20;    // 定义第二个变量
  printf("-> 交换前A和B的地址分别是:%X , %X\n",&a, &b);
  printf("-> 交换前A和B的值分别是:%d , %d\n", a, b);
  swap_1(a, b);
  // swap_2(&a, &b);
  // swap_3(a, b);
  printf("-> 交换后A和B的地址分别是:%X , %X\n",&a, &b);
  printf("-> 交换后A和B的值分别是:%d , %d\n", a, b);
}

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

// 第一个交换函数,按值传递
void swap_1(uint16_t a, uint16_t b){
  printf("交换前A和B的地址分别是:%X , %X\n",&a, &b);
  printf("交换前A和B的值分别是:%d , %d\n", a, b);
  uint16_t t=a;
  a=b;
  b=t;
  printf("交换后A和B的地址分别是:%X , %X\n",&a, &b);
  printf("交换后A和B的值分别是:%d , %d\n", a, b);
}

// 第二个交换函数,按地址传递
void swap_2(uint16_t *a, uint16_t *b){
  printf("交换前A和B的地址分别是:%X , %X\n",a, b);
  printf("交换前A和B的值分别是:%d , %d\n", *a, *b);
  uint16_t t=*a;
  *a=*b;
  *b=t;
  printf("交换后A和B的地址分别是:%X , %X\n",a, b);
  printf("交换后A和B的值分别是:%d , %d\n", *a, *b);
}

// 第三个交换函数,按引用传递
void swap_3(uint16_t &a, uint16_t &b){
  printf("交换前A和B的地址分别是:%X , %X\n",&a, &b);
  printf("交换前A和B的值分别是:%d , %d\n", a, b);
  uint16_t t=a;
  a=b;
  b=t;
  printf("交换后A和B的地址分别是:%X , %X\n",&a, &b);
  printf("交换后A和B的值分别是:%d , %d\n", a, b);
}

void printf(String format, ...) {
  char buffer[128]; // 创建缓冲区
  va_list args; // 定义可变参数列表
  va_start(args, format); // 初始化可变参数列表
  vsnprintf(buffer, sizeof(buffer), format.c_str(), args); // 格式化输出到缓冲区
  va_end(args); // 结束可变参数列表
  Serial.print(buffer); // 输出到串口
}
Loading
esp32-s3-devkitc-1