【嵌入式——C++】 数组与函数

这篇具有很好参考价值的文章主要介绍了【嵌入式——C++】 数组与函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数组

C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

一维数组

声明数组

//数据类型 数组名[数组长度] = {值1,值2};
type arrayName [ arraySize ];

double balance[10];

初始化数组

数据类型 数组名[数组长度] = {1,值2};
double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

数组的访问

for ( int i = 0; i < 5; i++ )
{
   cout << balance[i] << endl;
}
int arr[5];
cout << "数组中元素个数为:" << sizeof(arr) / sizeof(arr[0]) << endl;
cout << "数组首地址:" <<(int)arr << endl;
cout << "数组中第一个元素地址:" <<(int)&arr[0] << endl;

二维数组

声明数组

//数据类型 数组名[行数][列数];
int arra[2][3] =;

初始化数组

int arra[2][3] = { {1,2,3},{4,5,6} };

数组的访问

int arra[2][3] = { {1,2,3},{4,5,6} };
 for (int i = 0; i < 2; i++) {
  for (int j = 0; j < 3; j++)
  {
   cout << arra[i][j] << endl;
  }
 }

函数

函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

函数的定义

return_type function_name( parameter list )
{
   body of the function
}
  • return_type:返回类型一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。
  • function_name:函数名称,这是函数的实际名称。函数名和参数列表一起构成了函数签名。
  • parameter list:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
  • body of the function:函数主体包含一组定义函数执行任务的语句。
#include "Swap.h"

void swap(int a, int b) {
 int temp = a;
 a = b;
 b = temp;
 cout << "a=" << a << endl;
 cout << "b=" << b << endl;
}

函数声明

函数的声明可以多次,但是函数的定义只能有一次。函数要放在main()方法之上,或者是在main()方法之上提前进行声明.

void swap(int a, int b);

函数调用

// 函数声明
int max(int num1, int num2);
 
int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
   int ret;
 
   // 调用函数来获取最大值
   ret = max(a, b);
 
   cout << "Max value is : " << ret << endl;
 
   return 0;
}
 
// 函数返回两个数中较大的那个数
int max(int num1, int num2) 
{
   // 局部变量声明
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

函数参数

传值调用
向函数传递参数的传值调用方法,把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。

// 函数定义
void swap(int x, int y)
{
   int temp;
 
   temp = x; /* 保存 x 的值 */
   x = y;    /* 把 y 赋值给 x */
   y = temp; /* 把 x 赋值给 y */
  
   return;
}


int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
 
   cout << "交换前,a 的值:" << a << endl;
   cout << "交换前,b 的值:" << b << endl;
 
   // 调用函数来交换值
   swap(a, b);
 
   cout << "交换后,a 的值:" << a << endl;
   cout << "交换后,b 的值:" << b << endl;
 
   return 0;
}

//交换前,a 的值: 100
//交换前,b 的值: 200
//交换后,a 的值: 100
//交换后,b 的值: 200

指针调用
向函数传递参数的指针调用方法,把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。

// 函数定义
void swap(int *x, int *y)
{
   int temp;
   temp = *x;    /* 保存地址 x 的值 */
   *x = *y;        /* 把 y 赋值给 x */
   *y = temp;    /* 把 x 赋值给 y */
  
   return;
}

int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
 
   cout << "交换前,a 的值:" << a << endl;
   cout << "交换前,b 的值:" << b << endl;

   /* 调用函数来交换值
    * &a 表示指向 a 的指针,即变量 a 的地址 
    * &b 表示指向 b 的指针,即变量 b 的地址 
    */
   swap(&a, &b);

   cout << "交换后,a 的值:" << a << endl;
   cout << "交换后,b 的值:" << b << endl;
 
   return 0;
}

//交换前,a 的值: 100
//交换前,b 的值: 200
//交换后,a 的值: 200
//交换后,b 的值: 100

引用调用
向函数传递参数的引用调用方法,把引用的地址复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。

// 函数定义
void swap(int &x, int &y)
{
   int temp;
   temp = x; /* 保存地址 x 的值 */
   x = y;    /* 把 y 赋值给 x */
   y = temp; /* 把 x 赋值给 y  */
  
   return;
}
int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
 
   cout << "交换前,a 的值:" << a << endl;
   cout << "交换前,b 的值:" << b << endl;
 
   /* 调用函数来交换值 */
   swap(a, b);
 
   cout << "交换后,a 的值:" << a << endl;
   cout << "交换后,b 的值:" << b << endl;
 
   return 0;
}

//交换前,a 的值: 100
//交换前,b 的值: 200
//交换后,a 的值: 200
//交换后,b 的值: 100

函数默认参数

当你定义一个函数,你可以为参数列表中后边的每一个参数指定默认值。当调用函数时,如果实际参数的值留空,则使用这个默认值。
这是通过在函数定义中使用赋值运算符来为参数赋值的。调用函数时,如果未传递参数的值,则会使用默认值,如果指定了值,则会忽略默认值,使用传递的值。
:某一个参数有默认值,那么在这之后的参数都要有默认值。

//返回值类型 函数名 (参数 = 默认值)
int func(int a,int b = 10,int c = 10)
{
return a+b+c;
}

函数占位参数

//返回值类型 函数名 (数据类型)
void func(int a,int){}

函数重载

函数名可以相同,提高复用性,函数的返回值不可以作为函数重载的条件。
函数重载条件

  • 同一个作用域下;
  • 函数名称相同;
  • 函数参数类型不同,或者个数不同,或者顺序不同。

函数的分文件编写

创建后缀名为.h的头文件

#include <iostream>
using namespace std;

void swap(int a, int b);

创建后缀名为.cpp的源文件

#include "Swap.h"

void swap(int a, int b) {
 int temp = a;
 a = b;
 b = temp;
 cout << "a=" << a << endl;
 cout << "b=" << b << endl;
}

在头文件中写函数的声明,在源文件中写函数的定义。

#include "Swap.h"
swap(10,25);

Lambda

[capture](parameters)->return-type{body}
[](int x, int y){ return x < y ; }
[](int x, int y) -> int { int z = x + y; return z + x; }
//没有返回值
[capture](parameters){body}

C++变量传递有传值和传引用的区别。
可以通过前面的[]来指定:

  • []:沒有定义任何变量。使用未定义变量会引发错误;
  • [x, &y]:x以传值方式传入(默认),y以引用方式传入;
  • [&]: 任何被使用到的外部变量都隐式地以引用方式加以引用;
  • [&]:任何被使用到的外部变量都隐式地以引用方式加以引用;
  • [=]:任何被使用到的外部变量都隐式地以传值方式加以引用;
  • [&, x]:x显式地以传值方式加以引用。其余变量以引用方式加以引用;
  • [=, &z]:显式地以引用方式加以引用。其余变量以传值方式加以引用。

常函数

成员函数后加const后我们称这个函数为常函数,常函数内不可以修改成员属性,成员属性声明时加关键字mutable后,在常函数中依然可以修改。

void showPerson() const{
  //不可以修改
  m_Age = 100;
  //可以修改
  mutable int m_B;
 }

常对象

声明对象前加const称该对象为常对象,常对象只能调用常函数。文章来源地址https://www.toymoban.com/news/detail-801711.html

const Person p ;

到了这里,关于【嵌入式——C++】 数组与函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 启动电容与运行电容-电容-嵌入式开发-物联网开发

            启动电容与运行电容常常在单相异步电动机相关电路中十分常见,可以通过电容上标注的字母来区分,启动电容以CD开头,而运行电容以CBB开头。         启动电容以CD标识开头,一般来说其 耐压值小,容量大 。         启动电容一般与离心开关串联,电机启动以

    2024年02月13日
    浏览(37)
  • 嵌入式物联网STM32实战开发代码例程库

    几百个例程清单,CSDN下载地址: https://download.csdn.net/download/weixin_39804904/88671879 开发例程清单(持续新增中,欢迎点赞关注): 0001基于STM32F103单片机GPIO实现控制LED灯闪烁的程序代码0001.rar 0002基于STM32F103单片机GPIO实现按键KEY的检测程序代码0002.rar 0003基于STM32F103单片机GPIO实现

    2024年02月02日
    浏览(30)
  • Azure RTOS & 嵌入式无线网络框架简化物联网应用开发

    一、Azure RTOS概述 Azure RTOS 是一个实时操作系统 (RTOS),适用于由微控制器 (MCU) 提供支持的物联网 (IoT) 和边缘设备, Azure RTOS 旨在支持高度受限设备(电池供电,并且闪存容量不到 64 KB)。简而言之,这就是一套完整的针对于物联网应用开发的带有多线程功能,中间件和桌面

    2024年02月08日
    浏览(54)
  • 嵌入式物联网单片机项目开发实例-4G DTU边缘数据采集网关开发

    链接:https://pan.baidu.com/s/163D-kElFqXov629YaSrWDw?pwd=1688 提取码:1688 [1.EC200S_STM32F103_4G CAT1网络TCP和UDP的透传字符串] [2.EC200S_STM32F103_4G CAT1网络TCP和UDP的透传十六进制包含0x00] [3.EC200S_STM32F103_4G CAT1通过外置MQTT协议发送定位和固定数据到ONENET] [4.EC200S_STM32F103_4G CAT1通过外置MQTT协议发送

    2024年01月16日
    浏览(37)
  • MCU嵌入式开发-硬件和开发语言选择

    主要考虑以下方面来决定是否需要RTOS支持: 需要实现高响应时的多任务处理能力 需要实现实时性能要求高的任务 需要完成多个复杂的并发任务 具备满足工控系统实时性要求的各项功能特性。通过它提供的硬件库、线程支持、中断支持等,可以完全控制微控制器的各个外设,实

    2024年02月12日
    浏览(46)
  • FRDM‐K64F开发板 ARM Mbed 在线编译器嵌入式和物联网开发

    传感器是将物理参数转换为电输出的设备。 传感器是换能器的一种。 传感器可分为模拟传感器和数字传感器。 模拟传感器以电压和电流的形式提供输出。 微控制器需要 ADC(模数转换器)读取来自模拟传感器的数据。 许多较新的传感器都是数字传感器,即它们使用 I2C(内部

    2024年01月24日
    浏览(41)
  • 嵌入式linux物联网毕业设计项目智能语音识别基于stm32mp157开发板

    stm32mp157开发板FS-MP1A是华清远见自主研发的一款高品质、高性价比的Linux+单片机二合一的嵌入式教学级开发板。开发板搭载ST的STM32MP157高性能微处理器,集成2个Cortex-A7核和1个Cortex-M4 核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRTOS、RT-Thread等实时操作系统。开发板搭配仿真

    2024年02月02日
    浏览(57)
  • FPGA嵌入式开发一些Xilinx SDK库函数的理解

    最近在测试AXI Quad SPI这个IP核的端口时序,搭建BD后导出到硬件,在SDK中导入xspi_intr_example.c的源文件,在师兄的帮助下,浅浅研究了一下代码。 首先,需要修改源程序中的错误,参照CSDN文章:ZYNQ中断示例修改 做出以下修改: 此外,还要对中断驱动实例名称进行修改: 以下

    2024年02月12日
    浏览(39)
  • 【十年开发积累】STM32产品开发代码案例合集,嵌入式物联网工程师珍贵资料(物联技术666)

    简介     例程涵盖:STM32各类功能配置,外围传感器初始化,模块初始化,物联网协议,操作系统移植,功能开发,产品案例等等,十分具有参考价值。 0001基于STM32F103单片机GPIO实现控制LED灯闪烁的程序代码0001.rar 0002基于STM32F103单片机GPIO实现按键KEY的检测程序代码0002.rar

    2024年02月21日
    浏览(35)
  • 嵌入式Linux Qt5 (C++)开发栏目概述

    本栏目开始介绍Linux系统下的Qt C++程序开发,资源是以嵌入式为切入点(现在Linux系统下的Qt C++程序开发好像就是应用于嵌入式),那就跟着一起学习 Linux系统下的Qt C++程序开发知识 ,再扩展一下 嵌入式 的知识吧。我这里默认已经 熟悉C++基本语法、熟悉Qt在windows下的使用方

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包