arduino 学习笔记及课件02函数、数组与指针

本文是Arduino学习笔记,详细讲解了函数的四种类型:无参不带返回值、无参带返回值、有参不带返回值、有参带返回值。接着介绍了数组的一维、二维和多维应用。最后,探讨了指针的基本概念、在函数中的应用以及如何利用指针操作数组。
AI助手已提取文章相关产品:

一、函数

函数功能:蒋实现某一功能的所有代码打包起来,类似于工具箱。根据函数返回与否可将函数分为带返回值的函数和不带返回值的函数。根据函数接口,可将函数分为有参函数和无参函数。
在这里插入图片描述

1.1无参不带返回值函数

示例1:计算固定数字之和,并在函数内部打印结果

void Sum() {
  int a = 3;
  int b = 4;
  int sum = 0;
  sum = a + b;
  Serial.println("Sum函数被调用,计算a+b的和");
  Serial.print("sum=");
  Serial.print(sum);
}

void setup() {
  Serial.begin(9600);
  Sum();//调用Sum函数,无返回值,直接在函数里打印结果,只能计算固定的数字之和。
}
void loop() {
}

1.2无参带返回值函数

示例2:计算两固定数字之和,调用函数后得到两数字计算结果并返回。

int Sum() {
  Serial.println("Sum函数被调用");
  int a = 3;
  int b = 4;
  int sum = 0;
  sum = a + b;
  return sum;//返回a+b的值
}

void setup() {
  Serial.begin(9600);
  int sum;//定义一个变量,接收Sum()函数返回的值
  sum = Sum(); //调用Sum函数,将返回值存放在sum变量中。
  Serial.print("sum=");
  Serial.print(sum);
}

void loop() {
}

示例3:代码优化

int Sum() {
  int a = 3;
  int b = 4;
  return a+b;//返回a+b的值
}

void setup() {
  Serial.begin(9600);
  Serial.print("sum=");
  Serial.print(Sum());//调用函数计算a+b的和并返回打印
}

void loop() {
}

1.3有参不带返回值函数

示例4:通过调用有参函数,将传入的两个参数计算之和在函数中打印出来。

void Sum(int a, int b ) {
  Serial.println("Sum函数被调用");
  Serial.print("两数之和为");
  Serial.println(a + b);
}
void setup() {
  Serial.begin(9600);
  Sum(3, 4);//传入需要计算的参数
}
void loop() {
}

1.4有参带返回值函数

示例5:通过调用有参函数,将传入两个参数计算之和返回

int Sum(int a, int b ) {
  return a+b;//将传入两参数计算之和返回
}
void setup() {
  Serial.begin(9600);
  Serial.print("两参数计算之和为");
  Serial.println(Sum(3,4));//调用函数并打印函数返回值
}
void loop() {
}

二、数组

数组:由数据类型相同的一系列元素组成。关键,元素类型,元素个数。普通变量使用的类型,数组都可以使用。

2.1一维数组

int a[50];//数组变量a可存放了50个int类型的元素
char b[12];//数组变量b可存放了12个char类型的元素

示例:打印一周每天的课时

#define week 7//宏定义,指定week代表数字7
int days[week] = {2,0,1,1,2,0,0};//存放一周每天的上课课时
int index;//变量index存放数组元素角标
void setup() {
  Serial.begin(9600);
  for(index=0; index<week; index++){
    Serial.print("星期");
    Serial.print(index+1);
    Serial.print("课时为");
    Serial.println(days[index]);
    }
}
void loop() {
}

2.2 二维数组

理解:一维数组,数组元素类型为数组
示例:计算一个月内平均每周上多少课

#define week 7
#define month 4
int days[month][week] = {
  {2, 0, 1, 1, 2, 0, 0},
  {2, 1, 0, 1, 2, 2, 0},
  {1, 3, 1, 0, 0, 0, 2},
  {3, 2, 1, 2, 1, 1, 0} //存放一周每天的上课课时
};
int index_m;//变量index存放数组元素角标
int index_w;//变量index存放数组元素角标
void setup() {
  Serial.begin(9600);
  for (index_m = 0; index_m < month; index_m++) {
    float sum = 0;
    for (index_w = 0; index_w < week; index_w++) {
      sum = sum + days[index_m][index_w];//计算当前周总课时数
    }
    float average = sum / 7;//计算当前周平均课时
    Serial.println(average);
  }
}
void loop() {
}

2.3多维数组

示例:计算一个季度内总课时

#define day 7//周角标,z
#define week 4
#define month 3
int days[month][week][day] = {
  {//存放1月上课课时
    {2, 0, 1, 1, 2, 0, 0},//存放一周每天的上课课时
    {2, 1, 0, 1, 2, 2, 0},
    {1, 3, 1, 0, 0, 0, 2},
    {3, 2, 1, 2, 1, 1, 0} 
  }, {//存放2月上课课时
    {3, 0, 1, 1, 2, 0, 0},
    {1, 1, 0, 3, 2, 4, 0},
    {1, 3, 1, 3, 0, 0, 2},
    {3, 2, 1, 3, 1, 1, 0} 
  }, {//存放3月上课课时
    {1, 0, 1, 1, 4, 0, 0},
    {2, 1, 0, 1, 2, 2, 0},
    {1, 4, 3, 0, 0, 2, 1},
    {4, 2, 4, 2, 3, 1, 0} 
  },
};
int index_m;
int index_w;//变量index存放数组元素角标
int index_d;//变量index存放数组元素角标
void setup() {
  Serial.begin(9600);
  int sum = 0;
  for (index_m = 0; index_m < month; index_m++) {
    int sum_m = 0;
    for (index_w = 0; index_w < week; index_w++) {
      int sum_w = 0;
      for (index_d = 0; index_d < day; index_d++) {
        sum_w = sum_w + days[index_w][index_w][index_d];//计算每周总课时(天课时之和)
      }
      sum_m = sum_m + sum_w;//计算每月总课时(周课时之和)
    };
    Serial.print(index_m+1);
    Serial.print("月总课时为:");
    Serial.println(sum_m);
    sum = sum + sum_m;//计算整个季度总课时(月课时之和)
  }
  Serial.print("本季度总课时为:");
  Serial.println(sum);
}
void loop() {
}

三、指针

3.1指针简介

最简单直白的理解就是钥匙,变量存放钥匙。
指针变量:存放变量地址的变量
地址运算符:&
注解:后面跟一个变量名,&给出该变量的地址。
例如:&a表示变量a的地址,假设为:0x34

地址运算符:*
注解:后面跟一个指针名或者地址时,*给出储存在指针指向地址上的值。

示例:
a=34;
b=&a; 指针变量b指向变量a的地址。及b=0x34
val=*b;指针变量b指向的地址0x34里的值赋给val变量。及val=34

3.2指针在函数中的应用

在这里插入图片描述
示例:函数传递变量地址

void interchange(int * u, int * v) {//u,v分别接收变量x,y的地址,*u,*v分别指向变量x、y中存放的值。
  int temp;
  temp = *u;//将x变量中的值赋值给temp
  *u = *v;//将y变量中的值赋值给变量x
  *v = temp;//将temp变量中的值赋给变量y
}

void setup() {
  Serial.begin(9600);
  int x = 5, y = 10;
  interchange(&x, &y);//将变量x与y的地址传输给函数
  Serial.println(x);
  Serial.println(y);
}
void loop() {
}

打印结果
在这里插入图片描述

示例:函数传递变量中的值
在这里插入图片描述

void interchange(int  u, int  v) {//u变量存放值5,v变量存放10。
  int temp;
  temp = u;//将u变量中的值赋值给temp
 u = v;//将v变量中的值赋值给变量u
  v = temp;//将temp变量中的值赋给变量v
}
void setup() {
  Serial.begin(9600);
  int x = 5, y = 10;
  interchange(x, y);//将变量5与10的给函数
  Serial.println(x);
  Serial.println(y);
}
void loop() {
}

打印结果
在这里插入图片描述

3.3、指针与数组

示例:通过指针打印数组

#define week 7

void setup() {
  Serial.begin(9600);
int dates[week]={1,3,5,7,9,2,4};//初始化数组
int *pr;
 pr = dates;//将数组首地址赋给指针变量pr,数组名存放的是数组首元素的地址
 int i=0;
while(i<7){
  Serial.print(*pr);//打印数组
  Serial.print("、");
  pr++;
  i++;
  }
}
void loop() {
}

操作指针

	dates+2 == &dates[2]//相同的地址
	*(dates+2== dates[2]//相同的值
	*dates+2 // 结果为3,表示数组第一个元素的值加2

通过操作指针打印数组元素


#define week 7
void setup() {
  Serial.begin(9600);
int dates[week]={1,3,5,7,9,2,4};//初始化数组
int *pr;
 pr = dates;//将数组首地址赋给指针变量pr,数组名存放的是数组首元素的地址
 int i=0;
while(i<7){
  Serial.print(*(pr+i));//打印数组
  Serial.print("、");
  i++;
  }
}
void loop() {
}
/*/

通过指针计算数组元素之和

#define week 7

int sum(int *dates, int n) { //指针变量dates存放数组首地址,n存放元素个数
  int i = 0;
  int total;
  while (i < n) {
    total += *(dates + i); //操作指针后移
    i++;
  }
  return total;
}
void setup() {
  Serial.begin(9600);
  int dates[week] = {1, 3, 5, 7, 9, 2, 4}; //初始化数组
  //调用函数,将数组首地址和数组元素个数值传输给函数
  Serial.println(sum(dates, week));
}
void loop() {
}

您可能感兴趣的与本文相关内容

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值