c++中数组作为参数传入函数

2023-05-16

前言:最近再看一个用c++写数组求逆矩阵的程序,那是相当的繁琐,但是很有趣。其中涉及了大量的数组运算,所以数组作为参数传入函数很重要,这里记录一下。


一维数组作为参数

1.我们除了要将数组名传入函数外,为了规范化,我们还要将数组的大小也要作为参数传入,而不是在函数内部去定义大小。即下面这种形式:

int sum_arr (int att[] , int size)

2.我们学习c的时候知道数组名就是首元素的地址,所以实际上传入函数的不是数组名,而是首元素的地址,所以除了上面的声明形式外,还可以写成

 int sum_arr (int *att , int size)

第一种很好理解直观,第二种最符合实际。

不管是哪种定义,使用函数时都是将数组名作为参数。比如 :

sum_arr (Ss , 66);

3.不要使用方括号表示法来传递长度

  int sum_arr (int att【size】)   //这是错的

4.不管是哪种声明方式,如果在函数内部对传入的数组进行了修改,该数组本身的值也会改变,有点像引用,这是因为前面提到过传入的是地址,我们是直接对地址上的元素进行修改。

5.为了防止在函数中修改了数组,可以使用const。
方法: 在声明的形参前加入const

  int sum_arr (const int att[] , int size)

6.在c++中,引入了一种新的方式,那就是使用数组区间。前面我们是将数组的首元素的地址和长度传入,这样就可以处理所有元素,当然我们也可以传入数组的首元素地址和末尾地址,参数就是【数组名,数组名+长度】,这样也可以处理所有元素,这就是数组区间。自然,我们也可以传入任意区间。

比如下面的代码:

int sum_arr(const int *begin,const int *end)
{
    const int *pt;
    int total = 0;

    for(pt = begin ; pt != end ; pt++)
    {
        total = total + *pt;
    }
    return total;
}


int A[Size] = {0,1,2,3,4,5,6,7} ;
int sum = sum_arr(A,A+8);

二维数组作为参数

与一维数组一样,有两种声明方式,但是区别是必须写出列数。
第一种:

int sum(int A[ ][ 4] , int size)  //不能写成 int sum(int A[ ][ ] , int size),必须将列数写进去,size的值是行数

第一种:

int sum(int (*A)[ 4] , int size)  //同样,必须将列数写进去,size的值是行数,而且必须要将*和数组名括起来。

至于使用方法都是一样,sum(A,4)

注意同样,不管是哪种声明方式,如果在函数内部对传入的数组进行了修改,该数组本身的值也会改变,有点像引用,这是因为前面提到过传入的是地址,我们是直接对地址上的元素进行修改。

例子:用二维数组实现矩阵的转置:

#include <iostream>

using namespace std;
const int hangshu = 2;
const int lieshu = 4;



void zhuanzhi(int A[][lieshu],int B[][hangshu],int B_hangshu)
{
    for(int i = 0 ; i < B_hangshu  ; i++)
    {
        for(int j = 0 ; j < 2  ; j++)
            B[i][j] = A[j][i];
    }
}


void show(int A[][lieshu],int hangshu,int lieshu)
{
    int i,j;
    for(i=0;i<hangshu;i++)
    {
        for(j=0;j<lieshu;j++)
                cout << A[i][j] << " ";
        cout << endl;
    }
}

void show2(int (*B)[2],int hangshu,int lieshu)
{
    int i,j;
    for(i=0;i<hangshu;i++)
    {
        for(j=0;j<lieshu;j++)
                cout << B[i][j] << " ";
        cout << endl;
    }
}

void input(int A[][lieshu],int hangshu,int lieshu)
{
    int i,j;
    for(i=0;i<hangshu;i++)
        for(j=0;j<lieshu;j++)
            cin >> A[i][j];
}


int main()
{
    int A[hangshu][lieshu];//2*4
    int B[lieshu][hangshu];//4*2
    input(A,2,4);
    show(A,2,4);
    zhuanzhi(A,B,4);
    show2(B,4,2);

    return 0;
}

/****************************************************
int sum_arr(const int *begin,const int *end)
{
    const int *pt;
    int total = 0;

    for(pt = begin ; pt != end ; pt++)
    {
        total = total + *pt;
    }
    return total;
}


int A[Size] = {0,1,2,3,4,5,6,7} ;
int sum = sum_arr(A,A+8);
***************************************************/

另外,这个程序如果可以写进一个类里面更好

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++中数组作为参数传入函数 的相关文章

  • 服务器能ping通,ssh却连不上

    问题现象 xff1a 1 原来用Xshell连着的窗口能正常操作 2 重新打开新的窗口却提示 xff1a Connecting to 192 168 36 61 22 Connection established To escape to
  • ubuntu-18.04 root登录图形界面失败问题解决方案

    1 设置ROOT密码 先输入当前所在用户密码 xff0c 然后输入你要设置的root密码 xff0c 输入两次即可 xff01 2 进入 etc pam d目录 主要修改两个文件 圈了红色框框 xff0c 记得命令行下切换root账户 su
  • 树莓派做飞控的四轴无人机

    为什么拿树莓派做飞控 市面上有很多机遇stm32的现成飞控和教程 我碰巧有做一个无人机的想法 xff0c 而且手上刚好有树莓派4b一个 树莓派支持pyrhon编程和实时调控 需要准备的材料 电流电压匹配的电机 电调和电池 我选择的是闲鱼买的
  • linux系统之根文件系统树制作

    前言 xff1a 很早就在linux下做过了uboot移植 xff0c linux内核移植以及文件系统的制作 xff0c 一直没有来得及总结 xff0c 现在好好把之前做过的东西整理一下 xff0c 主要是为了备忘 现在总结一下根文件系统树
  • 二级必会词汇

    形容词 xff08 xff11 xff09 xff11 惜 xff12 xff1a 怪 xff13 xff1a 嬉 xff14 xff1a 悲 xff15 xff1a 厳 xff16 xff1a 悔 xff17 xff1a 苦 xff18
  • python学习-isinstance()

    isinstance 是一个内置的函数 xff08 BIF xff09 它允许某个特定标识符是否包含某个特定类型的数据 如判断某个对象是不是列表 字典 整型等 gt gt gt a 61 1 2 3 gt gt gt b 61 123 gt
  • Ubuntu上安装PX4

    文字教程 视频教程 在Win10上安装虚拟机 VMware Workstation 16 Pro xff0c 在虚拟机安装18 04版ubuntu xff0c 其他版本可能安装不成功 xff0c 之前我20版本就安装失败 下列步骤开始前 x
  • stm32 红外遥控实现

    一 概述 红外遥控采用NEC协议 定时中断 预分频器采用72 xff0c 72M 72 61 1M xff0c 每秒1千次 xff0c 一次1us xff0c 即第1us计数器加1 溢出值设为10000 xff0c 即10ms xff0c
  • 关于simulink中的函数function模块

    前言 xff1a 我们前面提到过当遇到库中没有我们需要的模块时 xff0c 我们可以自己书写s函数 xff0c 其实s函数是一个比较高端的工具 xff0c 是用来书写一些比较复杂的模块 xff0c 而遇到一些简单的模块 xff0c 我们可以
  • px4飞行数据.ulg文件的分析

    参考 xff1a https blog csdn net walk2011 article details 83757139 以及 xff1a https blog csdn net qq 42570955 article details
  • offboard代码超详细注释

    这一部分主要对服务做了特别详细的讲解 span class token macro property span class token directive keyword include span span class token stri
  • offboard模式的全球位置发布

    例子中的代码控制的是飞机的本地位置 xff0c 也就是相对起飞位置的位置 xff0c 而如果我们采用全球位置 xff0c 也就是经纬海拔坐标 xff0c 如何去书写呢 xff1f 发布全球位置 xff08 经纬海拔坐标 xff09 头文件
  • mavros的常用服务介绍

    在mavros中 xff0c 最常用的服务就两个 xff0c 一个是解锁 xff0c 还有一个就是模式切换 当然还有其他的服务 xff0c 比如通过mavros修改航点信息 xff0c 但是不常用 xff0c 所以下面只介绍解锁和模式切换
  • offboard模式实现简单四边航线并自动降落

    前言 xff1a 这一部分不想在重复写了 xff0c 已放在作者的github上 xff0c 偷个懒0 0
  • 测试offboard模式的安全代码

    这段代码用于检验offboard模式的安全启动 xff0c 执行后飞机只会轻微的旋转 xff0c 不会起飞 span class token comment span span class token comment Created by
  • offboard里的期望姿态

    消息体头文件 xff1a mavros msgs AttitudeTarget h 里面的内容 xff1a span class token macro property Message for SET ATTITUDE TARGET sp
  • shell脚本自学笔记

    一 什么是Shell脚本 shell脚本并不能作为正式的编程语言 xff0c 因为它是在linux的shell中运行的 xff0c 所以称为shell脚本 事实上 xff0c shell脚本就是一些命令的集合 假如完成某个需求需要一口气输入
  • matlab2020安装

    前言 xff1a 这里之所以要安装最新的2020版本 xff0c 是因为matlab中的硬件支持工具是随着版本变化而变化的 xff0c 所以要升级matlab版本 MATLAB R2020a v9 8 0 最新中文版 64位 百度网盘链接后
  • px4的电调校准

    我们之前校准电调的步骤为 xff1a 第一 xff0c 先打开遥控器 xff0c 油门推到最大 第二 xff0c 给飞控供电 xff0c 此时电调会捕捉到油门最大量程 第三 xff0c 保持遥控不变 xff0c 飞控断电 xff0c 然后再

随机推荐

  • px4源码备份

    这几天在用1 8 0版本的源码时发现了玄学的事情 xff0c 在终端下完美运行和仿真 xff0c 但是拿到simulink下运行仿真就会出现飞机一进去就乱飞 xff0c 并且你关了simulink之后再回终端 xff0c 发现原本在终端下可
  • 数据结构有关树的知识总结(一)

    前段时间准备考研 xff0c 对数据结构做了一个简略的知识点总结 xff0c 知识针对考研所用到的数据结构 xff0c 下面是树的章节由于篇幅太多 xff0c 将有关树的知识点分开发表 xff0c 对B树和B 43 树没有深入了解 xff0
  • simulink中的state place模块的使用

    我们知道 xff0c state place模块输入的为u xff0c 输出的y xff0c 并且我们需要在模块参数中设置ABCD以及初始状态x的值 xff08 初始状态x的值一般为0 xff09 xff1a 但我们经常使用状态空间不太在意
  • 反馈线性化

    这里转载一篇介绍反馈线性化很好的文章 xff1a https max book118 com html 2018 1014 8135037141001126 shtm
  • simulink中使用memory模块实现变量的累加和

    在离散系统中 xff0c 我们经常会遇到需要存储上一时刻的变量 比如y xff08 k 1 xff09 xff0c 然后用在当前时刻的运算里 xff0c 这个时候我们就需要一个模块能够存储上一时刻的y xff08 k 1 xff09 xff
  • 关于使用gazebo启动很慢、很卡、很热的解决办法

    1 参照之前的博客进行离线下载模型 2 不要将系统装在移动硬盘上 3 断网 xff0c 因为联网的话他会一直搜索网上资源 xff0c 虽然此是可能会提示 xff1a Couldn span class token string 39 t f
  • sci中的插图操作和说明(超详细)

    http www 360doc com content 17 1219 23 50538487 714649321 shtml
  • latex中某一页出现图片与上下文间距过大,利用\vspace等强制修改间距的命令依然无法解决的问题

    问题描述 xff1a 当我利用下面的命令进行插入图片时 xff1a begin span class token punctuation span figure span class token punctuation span span
  • 魅族18解bl锁+刷boot+刷面具+刷lsp+刷hmspush教程

    一 解锁教程 这里就不多说了 xff0c 直接看教程 xff1a https www coolapk com feed 38216557 shareKey 61 MjUxODI2OGMzNGRlNjM1ZTQxYWY amp shareUi
  • 关于px4中uorb以及px4_simple_app的终极理解

    先允许我卖个萌 xff1a 看了一下午关于px4中的uorb的分析 xff0c 终于有所感悟了 信息量有点大 xff0c 先让我缓缓 xff0c 理理思绪 先说说我之前的疑惑吧 xff1a 疑惑1 在一开始学习px4的时候 xff0c 就在
  • 关于无人机升力的产生

    前言 xff1a 之前学过飞控 xff0c 但是现在回顾了一下发现最基本分析升力的产生的原因都忘了 xff0c 于是记录下来 先问一个问题 xff1a 到底是上表面的路程长还是下表面的路程长 xff1f 之前一直记错了以为是上表面的路径长
  • stm32之定时器运用———呼吸灯

    呼吸灯原理 1 在模拟电路中 xff0c 呼吸灯的实现可以通过一个呈现正弦的电压控制 xff0c 这个电压是连续变化的 xff0c 所以肉眼看上去就是逐渐变暗 xff0c 逐渐变亮 2 而在数字电路中如何实现这种效果呢 xff1f 就需要通
  • 数据结构有关树的知识总结(二)

    这一篇文章主要介绍三个知识点 xff1a 哈夫曼树 堆排序以及最佳归并树和败者树 xff08 四 xff09 哈夫曼树 1 构造哈夫曼树 xff1a 哈夫曼树的特点 xff1a 权值越大 xff0c 离根节点越近 xff1b 树中没有度为1
  • 关于磁力计的新的理解

    前言 xff1a 我发现真的是验证了一句话 xff0c 每次重看一遍书 xff0c 都能发现新的东西 xff0c 我发现看程序也是这样 xff0c 没重看一边都会发现新的东西 不想打字了 xff0c 就直接贴我的ppt
  • px4源码学习(local position estimator)

    前言 xff1a 之前学习的是px4源码中的attitude estimator q xff0c 可以说是学习的相当仔细和深入 于是借着这股劲继续学习位置估计中的local position estimator 另外需要说明的是 xff0c
  • px4在环仿真实践操作

    前言 xff1a 在这之前先确保你已经配置好了jMAVSim 一 在环仿真 有两种 xff0c 一种是软件在环仿真SITL xff0c 还有一种是硬件在环仿真HITL 先介绍HITL 二 软件在环仿真 步骤 xff1a 1 打开终端 xff
  • 关于px4源码中固定翼姿态控制

    在看完px4固定翼的姿态控制代码后 xff0c 我有几点思考 1 我们知道程序中姿态控制的方法是将控制角度转化为控制角速度 那pitch来说 xff0c 先求出设定的pitch和当前的pitch的差值 xff08 delta pitch x
  • 关于垂直起降固定翼VTOL

    参考网址 xff1a https www ncnynl com archives 201709 2068 html 截图 xff1a 尾座式演示视频 xff1a http 7xw24i com1 z0 glb clouddn com PX4
  • 相关的飞控官网网址

    3DR官网 xff1a http 3drobotics com 这个网站简单来说就是3dr卖飞控的官方旗舰店 xff0c 我还以为开发者的一些东西也在上面 xff0c xff0c 好浪费感情 apm飞控的官网 xff1a http copt
  • c++中数组作为参数传入函数

    前言 xff1a 最近再看一个用c 43 43 写数组求逆矩阵的程序 xff0c 那是相当的繁琐 xff0c 但是很有趣 其中涉及了大量的数组运算 xff0c 所以数组作为参数传入函数很重要 xff0c 这里记录一下 一维数组作为参数 1